那什麼時候代表Component產生時的那瞬間:
- GameObject第一次Active的時候,就會呼叫所有Attached Components的Awake。
- 用程式呼叫AddComponent的時候
Start呼叫的時機點在於Component第一次Enable時的那瞬間。
那什麼時候代表Component Enable時的那瞬間:
- GameObject上有Implement Start或Update function這種的,在Inspector上就可以看到Script名稱旁有個Check Box,當GameObject第一次Active的時候且Check Box也是打"V"的狀態,就會呼叫Start
- 用程式呼叫Component.enabled = true時
Awake一定比Start還早,而且是場景上所有的Awake都結束後,才會呼叫Start。而預設各Component執行Start的順序等同各Component執行Awake的順序,除非在Awake動態改變Component的enable順序。
而Awake和Start最大的差別就在於一種情況:
當GameObject為Active,但是Component是Disabled的狀態,Awake會呼叫的但是Start是不會的。
GameObject上的Components彼此Awake的順序是?
理論上應該是新增Component的順序,但是基本上建議不要依賴這個順序,因為常常會忘記........雖然在Unity工具列的Edit->Project Settings->Script Execution Order來決定,但是一樣不方便。
GameObject之間的Components彼此Awake的順序是?
Unity並未定義GameObject之間的執行順序,一樣建議不要仰賴GameObject的Hierarchy來決定Components之間Awake的順序。
如果真的Components之間或GameObjects之間在Initial之間是有耦合狀態的,建議還是一個Master Script來管理,看是要動態新增GameObject或是動態新增Component,亦或是動態Enable GameObject或Component。