UdonSharpスクリプトの数が、CPU負荷にどのような影響を与えるかを検証しました。 特に、ライフサイクルメソッドの有無による影響を調査しています。
テスト方法はInstantiateを使用してスクリプト付きオブジェクトを生成し続け、FPSが20未満になるまでに生成できた数を記録して評価します。
- NoBehaviorMethod: ライフサイクルメソッドなし
- BehaviorMethod:
Updateを実装 - BehaviorMethod2:
UpdateLateUpdateを実装 - BehaviorMethod3:
UpdateLateUpdatePostLateUpdateを実装 - BehaviorMethodDisable:
Updateenabled = falseを実行し、処理を行わないようにする - BehaviorMethodDisable2:
UpdateLateUpdateenabled = falseを実行し、処理を行わないようにする - BehaviorEvent:
SendCustomEventDelayedFrames(nameof(_LoopUpdate), 1, EventTiming.Update)を常時ループする - BehaviorEvent2:
SendCustomEventDelayedSeconds(nameof(_LoopUpdate), 0.1f, EventTiming.Update)を常時ループする
| テスト項目 | スポーン数 |
|---|---|
| NoBehaviorMethod | 500000↑ |
| BehaviorMethod | 75674 |
| BehaviorMethod2 | 33566 |
| BehaviorMethod3 | 23210 |
| BehaviorMethodDisable | 500000↑ |
| BehaviorMethodDisable2 | 500000↑ |
| BehaviorEvent | 40983 |
| BehaviorEvent2 | 70276 |
- ライフサイクルメソッドを実装しないスクリプトはCPU負荷がほとんどない(500000オブジェクトを生成した状態でもFPSに変化がなかった)
- ライフサイクルメソッドの数によってCPU負荷が高くなる
SendCustomEventDelayedFrames(1)やSendCustomEventDelayedSeconds(0.1f)は呼び出しコストが多く常時ループでの使用は負荷が高い- ライフサイクルメソッドを実装した場合でも、
スクリプトをenabled = falseすることでCPU負荷をなくすことができる