天天看點

[Unity3D]Start和Awake方法的差別Start和Awake方法的差別和使用

Start和Awake方法的差別和使用

1. Awake

Awake is called when the script instance is being loaded.

Awake方法在腳本執行個體正在被加載的時候調用

  • Awake方法在腳本的生命周期中隻調用一次
  • Awake方法會在所有object都初始化後調用,是以不用擔心object還沒有加載出來,GameObject的find方法可以找到引用
  • Awake方法的調用順序在object之間時随機的
  • 當所有對象的Awake方法都調用完成後,才會執行第一個Start方法
  • Awake方法就像構造函數一樣
  • Awake方法不論腳本是否啟用,都會調用

2. Start

Start is called on the frame when a script is enabled just before any of the Update methods is called the first time.

腳本被啟用的時候,Start方法被調用,且是在Update方法之前被調用

  • Start方法在腳本生命周期中隻調用一次
  • Start方法在腳本啟用時才會調用,也就是啟用的第一次才調用

3. OnEnable

This function is called when the object becomes enabled and active.

這個方法在對象被激活和啟用時調用

  • OnEnable方法時在Awake之後Start之前調用,和他們不同的是,此方法可以調用多次。

4. Awake和Start方法的比較

大部分情況下,兩個方法都可以用來初始化,但是當A的初始化要用到B的初始化時,我們可以把B的初始化放在Awake中,然後A在Start中使用B就沒有問題了。

這是因為所有的Start方法的執行順序都是随機的,假如A在Start中初始化了某個值,而B要擷取這個值,而我們不知道哪個Start會先執行,可能B先執行,是以這樣可能就報錯了。

如果我們必須規定腳本的執行順尋,我們可以按照下圖進行設定。

[Unity3D]Start和Awake方法的差別Start和Awake方法的差別和使用

繼續閱讀