パフォーマンスに関するヒント
このページでは、UdonSharpスクリプトのパフォーマンスを向上させるためのヒントをいくつか紹介します。
UdonSharpはC#より低速です
Udonは、処理内容にもよりますが、通常のC#で同等のコードを実行する場合と比較して、約200倍から1000倍の時間がかかることがあります。
- 数千もの要素を反復処理するような、大規模で複雑なアルゴリズムは避けましょう。
- 非常に長い配列を毎フレーム反復処理することは避けましょう。
- 1フレームごとに処理する配列の要素数を制限する「タイムスライシング」を検討してください。
- 可能な限り、UnityネイティブのコンポーネントやVRChat SDKのコンポーネントを使用してください。
- 例:Udonで40個のGameObjectを回転させる代わりに、アニメーションを使用します。
- メソッドの戻り値をキャッシュしてパフォーマンスを向上させます。
- 例:
GameObject.transformやNetworking.LocalPlayerを毎フレーム取得する代わりに、Start()イベントで変数として保存し、後で再利用してください。
- 例:
private メソッドを使用するprivate メソッド
他のスクリプトから呼び出す必要がないメソッドは private に指定してください。Udon が呼び出し対象のメソッドを検索する仕組み上、public なメソッドが少ないほど、カスタムイベントのパフォーマンスが向上します。
異なるBehaviour間での呼び出しは、ローカルでのメソッド呼び出しよりも低速です。似たような動作は別々のBehaviourに分けるのではなく、1つのUdonSharpBehaviourにまとめるようにしてください。
CustomNetworkEventを送信するには、対象のメソッドがpublicである必要があります。publicでない場合、イベントは発生しません。また、_MyLocalMethodのようにアンダースコアで始まるメソッドは、ネットワークイベントを受け取ることができません。
使用しないでくださいGetComponent<T> 頻繁に
GetComponent<T>は、Start()イベントや頻繁に発生しないイベント内でのみ使用するようにしてください。
GetComponent<T>()は低速です。特にUdonでUdonSharpBehaviour型を取得する場合は注意が必要です。これは、UdonSharpが正しいUdonSharpBehaviour型であることを確認するために、すべてのUdonBehaviourをチェックするループを挿入する必要があるためです。
最終更新: