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



相關文章

遊戲程式入門 #00 Unity腳本建立與HelloWorld!... 此為 Unity C# 遊戲程式入門系列教學文章,適合對遊戲程式設計或遊戲開發有興趣但對程式沒有基礎的人 前言 在筆者以前的自學過程中,常常出現「我很想學某件事,但我該如何開始呢?...
教學 #14 – Scene(場景) Scene是個很重要的環節,在中文稱為「場景」 以比較直覺的方式來說明的話,Scene可以當作遊戲中的關卡,每一個關卡都是獨立的Scene 在Unity的工具列中,File下會看到...
教學 #03 – 位置、旋轉、縮放 上一篇文提到了Transform以及基本的移動,但是沒有把Transform講清楚 在Transform中有三個最重要的資訊,分別是位置(Position)、旋轉(Rotation)、縮放(S...
教學 #08 – 碰撞事件 Unity的碰撞事件與滑鼠點擊事件是差不多的撰寫方式,一樣是在腳本中打上函數名稱就能夠使用事件。 事件主要分成兩大類: OnCollision - 碰撞事件OnTrigger - 觸發事...