Unity中腳本的生命週期

Unity腳本從喚醒到銷燬都有着一套比較完善的生命週期,添加任何腳本都要遵守生命週期法則!

接下來介紹幾種系統自調用的重要方法。首先要我們先來說明一下它們的執行順序:

Awake --> Start --> Update --> FixedUpdate --> LateUpdate -->OnGUI -->Reset --> OnDisable -->OnDestroy

下面我們針對每一個方法進行詳細的說明:

1.Awake用於在遊戲開始之前初始化變量或遊戲狀態。在腳本整個生命週期內它僅被調用一次.Awake在所有對象被初始化之後調用,所以你可以安全的與其他對象對話或用諸如GameObject.FindWithTag()這樣的函數搜索它們。每個遊戲物體上的Awake以隨機的順序被調用。因此,你應該用Awake來設置腳本間的引用,並用Start來傳遞信息Awake總是在Start之前被調用。它不能用來執行協同程序。

2.Start僅在Update函數第一次被調用前調用。Start在behaviour的生命週期中只被調用一次。它和Awake的不同是Start只在腳本實例被啓用時調用。你可以按需調整延遲初始化代碼。Awake總是在Start之前執行。這允許你協調初始化順序。在所有腳本實例中,Start函數總是在Awake函數之後調用。

3.Update正常更新,用於更新邏輯。每一幀都執行,處理Rigidbody時,需要用FixedUpdate代替Update。例如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate裏的固定幀,而不是Update中的幀。(兩者幀長不同)FixedUpdate每固定幀繪製時執行一次,和update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率低下的時候FixedUpdate調用次數就會跟着下降。FixedUpdate比較適用於物理引擎的計算,因爲是跟每幀渲染有關。Update就比較適合做控制。

4.FixedUpdate:固定幀更新,Unity導航菜單欄中,點擊“Edit-->Project Setting-->Time”菜單項後,右側的Inspector視圖將彈出時間管理器,其中“Fixed Timestep”選項用於設置FixedUpdate()的更新頻率,更新頻率默認爲0.02s

5.LateUpdate在所有Update函數調用後被調用,和fixedupdate一樣都是每一幀都被調用執行,這可用於調整腳本執行順序。例如:當物體在Update裏移動時,跟隨物體的相機可以在LateUpdate裏實現。LateUpdate,在每幀Update執行完畢調用,他是在所有update結束後才調用,比較適合用於命令腳本的執行。官網上例子是攝像機的跟隨,都是在所有update操作完纔跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。

6.OnGUI:在渲染和處理GUI事件時調用。比如:你畫一個button或label時常常用到它。這意味着OnGUI也是每幀執行一次。

7.Reset:在用戶點擊檢視面板的Reset按鈕或者首次添加該組件時被調用。此函數只在編輯模式下被調用。Reset最常用於在檢視面板中給定一個默認值。

8.OnDisable:當物體被銷燬時 OnDisable將被調用,並且可用於任意清理代碼。腳本被卸載時,OnDisable將被調用,OnEnable在腳本被載入後調用。注意: OnDisable不能用於協同程序。

9.OnDestroy:當MonoBehaviour將被銷燬時,這個函數被調用。OnDestroy只會在預先已經被激活的遊戲物體上被調用。注意:OnDestroy也不能用於協同程序。

備註:

協同程序,即在主程序運行時同時開啓另一段邏輯處理,來協同當前程序的執行。換句話說,開啓協同程序就是開啓一個線程。在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可開啓一個協同程序,也就是說該方法必須在MonoBehaviour或繼承於MonoBehaviour的類中調用。

發佈了33 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章