ライフサイクルの実行順序
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 58/67。
Unity は、オブジェクトが出現した瞬間から破棄される瞬間まで、スクリプトのメソッドを決まった順序で呼び出します。
Awake():オブジェクトが読み込まれたとき、または生成されたときに1回。OnEnable():その直後に、さらにオブジェクトが表示されるたびに。Start():スクリプトの最初のフレームの前に1回。FixedUpdate():物理演算のクロックに合わせて、デフォルトでは1秒間に50回実行されます。そのため、1フレーム内で0回、1回、または複数回実行され、必ずそのフレームのUpdate()より前に呼び出されます。Update():フレームごとに1回。LateUpdate():フレームごとに1回、すべてのUpdate()の後。OnDisable():オブジェクトが非表示になるたびに、また破棄される前に。OnDestroy():オブジェクトが破棄されるときに1回。
オブジェクトがアクティブである間、ステップ4から6はフレームごとに繰り返されます。生成されたオブジェクトも同じ順序をたどります。Instantiateは戻る前に複製されたオブジェクトのAwake()とOnEnable()を実行し、その複製のStart()は最初のUpdate()より前に実行されます。
この順序から、2つの習慣が導かれます。Awake()のコードでオブジェクト自身のフィールドを初期化しておけば、他のすべてのオブジェクトのStart()が実行される時点で準備が整います。また、物理演算のコードはFixedUpdate()に記述します。そのステップの間隔は常に0.02秒なので、フレームの速さにかかわらず一定です。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。