1. 程式人生 > >unity-預設函式的生命週期(執行順序)

unity-預設函式的生命週期(執行順序)

概述

unity的API中詳細介紹了unity指令碼預設函式的執行順序,點這裡訪問。這裡主要介紹下面這張圖:
生命週期

主要執行順序

編輯器->初始化->物理系統->輸入事件->遊戲邏輯->場景渲染->GUI渲染->物體啟用或禁用->銷燬物體->應用結束

主要函式介紹

Reset是在使用者點選檢視面板的Reset按鈕或者首次新增該元件時被呼叫。此函式只在編輯模式下被呼叫。Reset最常用於在檢視面板中給定一個最常用的預設值。

Awake用於在遊戲開始之前初始化變數或遊戲狀態。在指令碼整個生命週期內它僅被呼叫一次.Awake在所有物件被初始化之後呼叫,所以你可以安全的與其他物件對話或用諸如 GameObject.FindWithTag 這樣的函式搜尋它們。每個遊戲物體上的Awke以隨機的順序被呼叫。因此,你應該用Awake來設定指令碼間的引用,並用Start來傳遞資訊 ,Awake總是在Start之前被呼叫。它不能用來執行協同程式。

OnDisable不能用於協同程式。當物件變為不可用或非啟用狀態時此函式被呼叫。

Start在behaviour的生命週期中只被呼叫一次。它和Awake的不同是Start只在指令碼例項被啟用時呼叫。你可以按需調整延遲初始化程式碼。Awake總是在Start之前執行。這允許你協調初始化順序。

FixedUpdate ,當MonoBehaviour啟用時,其在每一幀被呼叫。處理Rigidbody時,需要用FixedUpdate代替Update。例如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate裡的固定幀,而不是Update中的幀。(兩者幀長不同)。

OnTriggerEnter可以被用作協同程式,在函式中呼叫yield語句。當Collider(碰撞體)進入trigger(觸發器)時呼叫OnTriggerEnter。

OnCollisionEnter相對於OnTriggerEnter,傳遞的是Collision類而不是Collider。Collision包含接觸點,碰撞速度等細節。如果在函式中不使用碰撞資訊,省略collisionInfo引數以避免不必要的運算。注意如果碰撞體附加了一個非動力學剛體,只發送碰撞事件。可以被用作協同程式。

當滑鼠在GUIElement(GUI元素)或Collider(碰撞體)上點選時呼叫OnMouseDown

Update是實現各種遊戲行為最常用的函式。

一個協同程式在執行過程中,可以在任意位置使用yield語句。yield的返回值控制何時恢復協同程式向下執行。協同程式在物件自有幀執行過程中堪稱優秀。協同程式在效能上沒有更多的開銷。StartCoroutine函式是立刻返回的,但是yield可以延遲結果。直到協同程式執行完畢。

LateUpdate是在所有Update函式呼叫後被呼叫。這可用於調整指令碼執行順序。例如:當物體在Update裡移動時,跟隨物體的相機可以在LateUpdate裡實現。

渲染和處理GUI事件時呼叫。這意味著你的OnGUI程式將會在每一幀被呼叫。要得到更多的GUI事件的資訊查閱Event手冊。如果Monobehaviour的enabled屬性設為false,OnGUI()將不會被呼叫。

OnApplicationQuit,當用戶停止執行模式時在編輯器中呼叫。當web被關閉時在網路播放器中被呼叫。