[ 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 分開才能確保使用時已經完成初始化



相關文章

基礎教學 #03 – SyncVar 資料同步 SyncVar是UNet中處理資料同步非常好用的功能,他的概念是「自動將Server變動的值同步至Client」,有了這個簡潔的功能我們才能快速建立起多人連線遊戲。 首先可以參考這段程式...
教學 #02 – 基本的移動 在Unity中,所有與位置、旋轉、縮放相關的功能都由Transform這個組件控制 而transform這個屬性便是用來抓取遊戲物件(GameObject)上的Transform組件 以...
教學 #05 – 物件創造、物件銷毀 這次來講到物件創造與物件銷毀,我們繼續使用先前的小飛兵專案來教學,這次要做的功能是「按下鍵盤Z發射子彈」並且「子彈超過一定距離時銷毀」,在這次教學中會使用到先前的移動與鍵盤事件。 創造...
教學 #16 – Sorting Layers(排序圖層) 這一篇是補充Layer篇忘記打的 在寫Layer跟Tag時大家應該都有看到Sorting Layers 這是在2D中用來劃分圖層順序的重要東西 由於Layer大多拿來做碰撞的...