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



相關文章

遊戲程式入門 #01 Start 與 Update 當我們在 Unity 中新增一個腳本 (Script) 時,程式碼中會待有預設的 Start( ) 與 Update( ) 函數,這兩個函數代表的涵義分別是「開始」與「每次更新」 嘗試加入以下程...
教學 #15 – 發佈設定 點擊工具列中的File -> Build Settings 開啟發佈設定的視窗 開啟後會看到一大堆選項跟按鈕可以點,很明顯的左下角是發佈的平台,比較值得一提的有 ...
教學 #03 – 位置、旋轉、縮放 上一篇文提到了Transform以及基本的移動,但是沒有把Transform講清楚 在Transform中有三個最重要的資訊,分別是位置(Position)、旋轉(Rotation)、縮放(S...
教學 #16 – Sorting Layers(排序圖層) 這一篇是補充Layer篇忘記打的 在寫Layer跟Tag時大家應該都有看到Sorting Layers 這是在2D中用來劃分圖層順序的重要東西 由於Layer大多拿來做碰撞的...