処置前:
処置後:
「先輩、Unityアプリが重いんですけど」
「1フレームでUpdate()は何回呼んでる?」
「100回です」
「あー、それはマネージャをつくって管理した方がいいな。やり方を教えよう」
「ありがとうございます!」
UnityのUpdate()のコールは数が多いとアプリの実行の負担になります。そこで、Update()をUpdateManagerで管理してみましょう。プロファイラーを見ると違いがハッキリわかります。
こんな感じで書きます:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class UpdateManager : MonoBehaviour { public List<ManagedUpdateBehavior> list = new List<ManagedUpdateBehavior>(); // Update is called once per frame void Update() { var count = list.Count; for (var i = 1; i < count; i++) { list[i].UpdateMe(); } } }
アプリ起動時にインスタンスをマネージャのlistプロパティに追加します:
void Start() { ... // Update Managerに自分を登録する UpdateManager um = GameObject.Find("UpdateManager").GetComponent<UpdateManager>(); um.list.Add(this); }
するとプロファイラの様子が、こんな感じから…
こんな感じに変わります:
60FPSが見えてきました!
より詳細はUnity公式の以下の記事が参考になります: