unity中函式的執行順序
在Unity指令碼中,有一些事件函式會在指令碼執行時按預定順序執行。 該執行順序如下所述:
編輯
- Reset:Reset是用來初始化指令碼屬性的,在第一次指令碼附在物件上的時候和按下Reset按鈕的時候會被執行。
第一次場景載入
- Awake:Awake方法總是在Start方法執行之前和在一個prefab初始化後被呼叫。(如果一個gameobject處於inactive的狀態,則Awake不會被呼叫,一直會到gameobject處於active狀態的時候會被呼叫)
- OnEnable:(只有在物件處於活動狀態時才會呼叫):在啟用物件後立即呼叫此函式, 當建立一個MonoBehaviour例項時會發生。例如,當一個關卡載入或者一個帶有指令碼的GameObject例項化的時候。
- OnLevelWasLoaded:這個方法被執行,是為了通知遊戲已經載入了新的關卡。
請注意,對於新增到場景中的物件,所有指令碼的Awake和OnEnable函式將在呼叫其中的任何指令碼的Start,Update等之前呼叫。 當然,在遊戲過程中物件被例項化時,這不能被強制執行。
在第一幀更新之前
- Start:只有在啟用指令碼例項時,才會在第一次幀更新之前呼叫Start。
對於新增到場景中的物件,物件上的所有指令碼的Update函式執行之前呼叫Start函式。 當然,在遊戲過程中物件被例項化時,這不能被強制執行。
幀與幀之間
- OnApplicationPause
Update的順序
當你跟蹤遊戲邏輯和互動,動畫,相機位置等時,可以使用幾個不同的事件。 常用的模式是在Update函式中完成大部分的任務,不過也有其他一些函式可以利用。
- FixedUpdate:FixedUpdate通常比Update被呼叫得更頻繁。如果幀率很低的時候,FixedUpdate可以一幀被呼叫多次;如果幀率很高的時候,FixedUpdate也可以幾幀呼叫一次。所有的物理計算和更新都會在FixedUpdate後立即生效。在FixedUpdate中應用運動計算時,您不需要通過Time.deltaTime乘以您的值。 這是因為FixedUpdate是在可靠的定時器上呼叫的,與幀速率無關。
- Update:Update函式每一幀呼叫一次。這是我們使用最頻繁的一個函式。
- LateUpdate:LateUpdate同樣也是每一幀呼叫一次,在Update函式結束之後被呼叫。LateUpdate常用於第三人稱攝像頭的實時跟隨。如果你在Update函式中讓角色移動或者轉彎,你可以把所有攝像頭的移動和旋轉計算都放到LateUpdate函式中。這可以確保在角色完成移動或者轉彎動作之後攝像頭才開始跟隨。
渲染期間
- OnPreCull:在相機剔除場景之前呼叫。
- OnBecameVisible/OnBecameInvisible:當一個物體對任何相機變得可見/不可見時呼叫。
- OnWillRenderObject:如果物件可見,則為每個攝像機呼叫一次。
- OnPreRender:在相機開始渲染場景之前呼叫。
- OnRenderObject:所有常規場景渲染完成後呼叫。 此時可以使用GL類或Graphics.DrawMeshNow繪製自定義幾何圖形。
- OnPostRender:相機完成渲染場景後呼叫。
- OnRenderImage:在場景渲染完成後呼叫,用來對影象進行後期處理。
- OnGUI:每幀呼叫多次,用於響應GUI事件。Layout和Repaint事件首先被處理,然後是每個輸入事件的佈局和鍵盤/滑鼠事件。
- OnDrawGizmos :用於在場景檢視中繪製Gizmos以進行視覺化。
協程
正常的協程更新在Update函式返回之後呼叫。協程是一個函式,可以暫停執行(yield),直到給定的YieldInstruction完成。 Coroutines的不同用途:
- yield :所有的Update函式在下一幀被呼叫後,協程將繼續。
- yield WaitForSeconds:在指定的時間延遲後,呼叫所有Update函式之後,繼續。
- yield WaitForFixedUpdate:在所有指令碼上呼叫所有FixedUpdate後繼續。
- yield WWW:一個WWW下載完成之後繼續。
- yield StartCoroutine:連結協程,會等MyFunc協程先完成。
當物件被銷燬的時候
- OnDestroy:物件存在的最後一幀更新完之後的所有update函式執行完之後執行。(物件可能在響應Object.Destroy或關閉場景時被銷燬)。
當中止的時候
這些函式被呼叫到場景中的所有活動物件上:
- OnApplicationQuit:在應用程式退出之前,所有遊戲物件都會呼叫該函式。 在編輯器中,當用戶停止播放模式時會呼叫它。
- OnDisable:當物件被禁用或不活動時,將呼叫此函式。
流程圖
--------------------- 本文來自 花海_ 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/u012130706/article/details/79393527?utm_source=copy