1. 程式人生 > >Start()和Awake()的區別

Start()和Awake()的區別

在Unity3d遊戲程式執行時所有附加到遊戲物件上的指令碼元件都會執行, Awake方法和Start方法都只會執行一次,多用於資料初始化。 這兩個方法的執行順序是: 先執行Awake方法,再執行Start方法,之後才是Update().

當指令碼設定為不可用時
Awake方法仍然會執行一次,而Start方法則不會執行

在遊戲開始之前Awake用來初始化變數或遊戲狀態。 Awake方法在指令碼生命週期中只會被呼叫一次。Awake方法在所有遊戲物件初始化完之後才會被呼叫,所以可以安全的在Awake方法中引用或請求其它遊戲物件資料。 所有遊戲物件的Awake方法呼叫順序是隨機的。所以應該全用Awake方法來設定指令碼之間的引用,而使用Start方法來互相來回傳遞資訊。Awake方法總是在任何的Start方法呼叫之前呼叫。Awake不能做為協同(coroutine)使用

在Unity中使用Awake方法做為初始化器,而不是使用C#語法中的建構函式。在建構函式中進行初始化元件的序列化狀態是未定義的。就像建構函式一樣,Awake只調用一次。

Start是在物件被第一次enable之後,在Update之前呼叫的,Start在指令碼的生命週期中也只可能被呼叫一次。Start可能不會被立刻呼叫,比如我們之前沒有讓其enable,當指令碼被enable時,Start才會被呼叫。