當我們要在 Unity 中處理初始化的部分時,大多都是寫在「Start」的函式中,但若寫在「Awake」也能有差不多的效果。
那 Start 跟 Awake 差在哪邊呢? 首先要先看一下Unity官方的生命週期圖
( 圖有點大張 )
可以看到 Awake 是比 Start 還要更早執行的,這意味著雖然兩者都是初始化的動作,但寫在 Awake 中可以比 Start 更早初始化一些東西
Awake 跟 Start 中分別使用 Debug.Log 的效果
void Awake() { Debug.Log("is Awake"); } void Start() { Debug.Log("is Start"); }
此外,Start 是在 OnEnable 之後才會執行,如果腳本在物件身上是不啟用的狀態,Awake 會執行但 Start 不會執行
( Start 的訊息沒出現 )
雖然 Awake 跟 Start 的功能差不多,但會建議將需要初始化的內容寫在 Awake 之中
而若需要在腳本初始化時調用其他物件或著其他腳本 ( GetComponent ),就建議寫在 Start 之中
這是為了避免呼叫其他腳本時,被呼叫的腳本還沒有完成初始化的動作,導致實際執行的結果與預期的不符
將 Awake 跟 Start 分開才能確保使用時已經完成初始化