Awake()とStart()
では、GameObjectが非アクティブだったり、コンポーネントがdisableだったらどうなるでしょうか?
また、AddComponent()で追加したときは?
そこら辺をまとめました。
結論から言うと・・・
Awake()は、GameObjectがアクティブであれば、コンポーネントがenableでもdisable実行されます。Start()は、GameObjectがアクティブで、コンポーネントがenableでないと実行されません。
AddComponent()で追加したときは、アクティブの場合だと内部でAwake()が呼ばれます。
一覧表
関数 | Active | enable | 実行 |
---|---|---|---|
Awake() | true | true | 〇 |
Awake() | true | false | 〇 |
Awake() | false | true | × |
Awake() | false | false | × |
Start() | true | true | 〇 |
Start() | true | false | × |
Start() | false | true | × |
Start() | false | false | × |
サンプル
GetComponentSample.cs
まずはこれを、"Child Object 1~4" にそれぞれ追加して実行してみましょう。
Hierarchyは上の画像を参照のこと。
実行結果
Game Object | Active | enable | Active 実行 | enable 実行 |
---|---|---|---|---|
Child Object 1 | true | true | 〇 | 〇 |
Child Object 2 | false | true | × | × |
Child Object 3 | true | false | 〇 | × |
Child Object 4 | false | false | × | × |
AddComponent()で追加したときは・・・
Start()は、Activeでenableの場合そのうち呼ばれますよ。
気をつけるタイミング
でやったGetComponent関係で、
GetComponentInChildren<T>()を使った場合、Awake()もStart()も実行されていない状態で取得できてしまいます。
GetComponentInChildren<T>(true)など
また、インスペクターで直接に参照してるコンポーネントでも同じです。
Awake()やStart()が実行されている前提でGetComponent関係を使うときは注意しましょう。
0 件のコメント :
コメントを投稿