[ Unity C# ] 都是初始化,Awake、Start的差異

標籤: , , , , , ,

當我們要在 Unity 中處理初始化的部分時,大多都是寫在「Start」的函式中,但若寫在「Awake」也能有差不多的效果。

StartAwake 差在哪邊呢? 首先要先看一下Unity官方的生命週期圖


( 圖有點大張 )

 

可以看到 Awake 是比 Start 還要更早執行的,這意味著雖然兩者都是初始化的動作,但寫在 Awake 中可以比 Start 更早初始化一些東西

AwakeStart 中分別使用 Debug.Log 的效果

void Awake()
{
    Debug.Log("is Awake");
}
void Start()
{
    Debug.Log("is Start");
}

 

此外,Start 是在 OnEnable 之後才會執行,如果腳本在物件身上是不啟用的狀態,Awake 會執行但 Start 不會執行


( Start 的訊息沒出現 )

 

雖然 AwakeStart 的功能差不多,但會建議將需要初始化的內容寫在 Awake 之中

而若需要在腳本初始化時調用其他物件或著其他腳本 ( GetComponent ),就建議寫在 Start 之中

這是為了避免呼叫其他腳本時,被呼叫的腳本還沒有完成初始化的動作,導致實際執行的結果與預期的不符

AwakeStart 分開才能確保使用時已經完成初始化



相關文章

教學 #14 – Scene(場景) Scene是個很重要的環節,在中文稱為「場景」 以比較直覺的方式來說明的話,Scene可以當作遊戲中的關卡,每一個關卡都是獨立的Scene 在Unity的工具列中,File下會看到...
教學 #09 – 獲取Component(組件)資訊 每個GameObject都帶有數個Component組件,而我們自定義的腳本中常有一些需要抓取的資訊,例如角色的血量、速度等等的,就必須抓取物件Component中的一些參數。 Get...
基礎教學 #05 – ClientRpc 遠端呼叫客戶端... ClientRpc是與Command相對的功能,是由「Server」去要求「Client」執行,兩者的撰寫方式是差不多的,只需要在函式前加上,不過函式名稱必須是「Rpc」開頭。 首先我先...
基礎教學 #04 – Command 命令 Command在UNet也是一個很重要的項目,Command的作用在於「命令Server執行」 在#03中有說到只有Server的數值改變時SyncVar才會同步更新,而Command可...