UnityのMonoBehaviourについて
UnityのC#スクリプトは、MonoBehaviourを継承することになっているらしい。より詳細な仕様やノウハウを調査する。
オフィシャルのAPIリファレンス Unity - Scripting API: MonoBehaviour
MonoBehaviour offers life cycle functions that make it easier to develop with Unity.
この一文が本質的。
MonoBehaviourを継承するクラスは、Unity上のComponentとしてインスタンス化される。
スクリプトが有効になったフレームで、MonoBehaviour.Start()
メソッドが呼び出される。Start()
は、オブジェクトの初期化に関する処理を行う。
また、すべてのStart()
に先立って、MonoBehaviour.Awake()
が呼ばれる。
クラスA
のインスタンスの初期化にクラスB
の初期化済みインスタンスが必要な場合、B
の初期化はAwake()
で、A
の初期化はStart()
で行うべき。
Awake()
はすべてのGameObjectの初期化後に呼ばれるため、参照が必要なだけならGameObject.FindWithTag
などのメソッドを利用できる。
また、スクリプトのComponentが無効化されていても、紐づいているGameObjectが有効ならAwake()
が呼ばれる。一方、Start()
は呼ばれない。
毎フレームMonoBehaviour.Update()
が呼ばれる。
前回の呼び出しからの経過時間はTime.deltaTime
で取得できる。
MonoBehaviour.FixedUpdate()
は、フレームレートに依存せず定期的(デフォルトでは50/s)に呼ばれる。
物理計算を行う場合、Update()
ではなくFixedUpdate()
を使うべき。
Unityの時間管理について、より詳細な情報は以下。
すべてのUpdate()
の呼び出しのあと、MonoBehaviour.LateUpdate()
が呼ばれる。
追尾カメラなど、他オブジェクトのUpdate()
後に行うべき処理がある場合に有用。