unity3d事件函數的執行順序

在Unity腳本中,有一些事件函數按照腳本執行的順序執行。 這個執行順序如下所述:
編輯器
reset:重置被調用來初始化腳本的屬性,當它第一次連接到對象,也是使用重置命令時。
第一個場景加載
當一個場景開始時,這些函數被調用(場景中的每個對象一次)。
Awake:這個函數總是在任何啓動函數之前被調用,並且在實例化預製件之後。 (如果遊戲對象在啓動過程中處於非活動狀態,則只有在喚醒之後纔會調用它。)
OnEnable :(僅在Object處於活動狀態時調用):在啓用對象後立即調用此函數。 當創建一個MonoBehaviour實例時會發生這種情況,比如當一個級別被加載或者一個帶有腳本組件的GameObject被實例化時。
OnLevelWasLoaded:執行該函數以通知遊戲已經加載了新的級別。
請注意,對於添加到場景中的對象,所有腳本的Awake和OnEnable函數將在調用Start,Update等之前被調用。 當然,在遊戲過程中實例化一個對象時,這是不能實施的。
在第一幀更新之前
Start:只有在啓用腳本實例的情況下纔會在第一次幀更新之前調用Start。
在幀之間
OnApplicationPause:在檢測到暫停的幀的末尾調用,在正常幀更新之間有效。 在調用OnApplicationPause之後,會發出一個額外的幀,以允許遊戲顯示指示暫停狀態的圖形。
Update的順序
當你跟蹤遊戲邏輯和交互,動畫,攝像頭位置等時,可以使用幾個不同的事件。常用模式是執行Update函數中的大部分任務,但也可以使用其他函數。
FixedUpdate:FixedUpdate通常比Update更頻繁地被調用。如果幀速率較低,則可以每幀調用多次,如果幀速率較高,則幀間可能完全不調用。所有的物理計算和更新都是在FixedUpdate之後立即發生的。在FixedUpdate中應用運動計算時,您不需要將值乘以Time.deltaTime。這是因爲FixedUpdate是在可靠的定時器上調用的,與幀速率無關。
Update:每幀調用一次Update。這是幀更新的主要功能。
LateUpdate:更新完成後,LateUpdate每幀調用一次。在更新中執行的任何計算將在LateUpdate開始時完成。 LateUpdate常見的用途是以下第三方相機。如果您讓角色在“更新”中移動並進行轉換,則可以在“LateUpdate”中執行所有相機移動和旋轉計算。這將確保角色在攝像頭跟蹤其位置之前完全移動。
渲染
OnPreCull:在照相機揀選場景之前調用。剔除確定哪些對象對相機可見。 OnPreCull在剔除發生之前被調用。
OnBecameVisible / OnBecameInvisible:當一個對象對任何相機變得可見/不可見時調用。
OnWillRenderObject:如果對象可見,則爲每個相機調用一次。
OnPreRender:在相機開始渲染場景之前調用。
OnRenderObject:完成所有常規場景渲染後調用。此時可以使用GL類或Graphics.DrawMeshNow繪製自定義幾何圖形。
OnPostRender:相機完成渲染場景後調用。
OnRenderImage:場景渲染完成後調用以允許對圖像進行後期處理,請參閱後期處理效果。
OnGUI:響應GUI事件,每幀調用多次。 Layout和Repaint事件首先被處理,然後是每個輸入事件的佈局和鍵盤/鼠標事件。
OnDrawGizmos用於在場景視圖中繪製Gizmos以進行可視化。
協同程序
更新函數返回後,將運行正常的協程更新。 協程是一個函數,可以暫停執行(yield),直到給定的YieldInstruction完成。 協程的不同用途:
yield 在所有更新函數在下一幀被調用後,協程將繼續。
yield WaitForSeconds在指定的時間延遲之後繼續,在爲該幀調用所有更新函數後繼續
yield WaitForFixedUpdate在所有腳本上調用了所有FixedUpdate後繼續
yield WWW在WWW下載完成後繼續。
yield StartCoroutine鏈接協程,並等待MyFunc協同程序先完成。
當對象被銷燬時
OnDestroy:在對象存在的最後一幀的所有幀更新之後調用此函數(該對象可能在響應Object.Destroy時或在場景關閉時被銷燬)。
退出時
這些函數被調用到場景中的所有活動對象上:
OnApplicationQuit:在應用程序退出前,所有遊戲對象都會調用這個函數。 在編輯器中,當用戶停止播放模式時被調用。
OnDisable:當行爲被禁用或不活動時,此函數被調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章