Unity3D中自帶事件函數的執行順序

在Unity3D腳本中,有幾個Unity3D自帶的事件函數按照預定的順序執行作爲腳本執行。其執行順序如下:

編輯器(Editor)

  • Reset:Reset函數被調用來初始化腳本屬性當腳本第一次被附到對象上,並且在Reset命令被使用時也會調用。
    編者注:Reset是在用戶點擊Inspector面板上Reset按鈕或者首次添加該組件時被調用。Reset最常用於在見識面板中給定一個默認值。

第一次場景加載(First Scene Load)
這些函數會在一個場景開始(場景中每個物體只調用一次)時被調用。

  • Awake:這個函數總是在任何Start()函數之前一個預設被實例化之後被調用,如果一個GameObject是非激活的(inactive),在啓動期間Awake函數是不會被調用的直到它是活動的(active)。
  • OnEnable:只有在對象是激活(active)狀態下才會被調用,這個函數只有在object被啓用(enable)後纔會調用。這會發生在一個MonoBehaviour實例被創建,例如當一個關卡被加載或者一個帶有腳本組件的GameObject被實例化。

注意:當一個場景被添加到場景中,所有腳本上的Awake()和OnEable()函數將會被調用在Start()、Update()等它們中任何函數被調用之前。自然的,當一個物體在遊戲過程中被實例化時這不能被強制執行。

第一幀更新之前(Before the first frame update)

  • Start:只要腳本實例被啓用了Start()函數將會在Update()函數第一幀之前被調用。

對於那些被添加到場景中的物體,所有腳本上的Start()函數將會在它們中任何的Update()函數之前被調用,自然的,當一個物體在遊戲過程中被實例化時這不能被強制執行。

在幀之間(In between frames)

  • OnApplicationPause:這個函數將會被調用在暫停被檢測有效的在正常的幀更新之間的一幀的結束時。在OnApplicationPause被調用後將會有額外的一幀用來允許遊戲顯示顯示圖像表示在暫停狀態下。

更新順序(Update Order)

當你在跟蹤遊戲邏輯和狀態,動畫,相機位置等的時候,有幾個不同的事件函數你可以使用。常見的模式是在Update()函數中執行大多數任務,但是也有其它的函數你可以使用。

  • FixedUpdate:FixedUpdate函數經常會比Update函數更頻繁的被調用。它一幀會被調用多次,如果幀率低它可能不會在幀之間被調用,就算幀率是高的。所有的圖形計算和更新在FixedUpdate之後會立即執行。當在FixedUpdate裏執行移動計算,你並不需要Time.deltaTime乘以你的值,這是因爲FixedUpdate是按真實時間,獨立於幀率被調用的。
  • Update:Update每一幀都會被調用,對於幀更新它是主要的負荷函數。
  • LateUpdate:LateUpdate會在Update結束之後每一幀被調用,任何計算在Update裏執行結束當LateUpdate開始時。LateUpdate常用爲第三人稱視角相機跟隨。

渲染(Rendering)

  • OnPreCull:在相機剔除場景前被調用。剔除是取決於哪些物體對於攝像機是可見的,OnPreCull僅在剔除起作用之前被調用。
  • OnBecameVisible/OnBecameInvisible:當一個物體對任意攝像機變得可見/不可見時被調用。
  • OnPreRender:在攝像機開始渲染場景之前調用。
  • OnRenderObject:在指定場景渲染完成之後調用,你可以使用GL類或者Graphics.DrawMeshNow 來繪製自定義幾何體在這裏。
  • OnPostRender:在攝像機完成場景渲染之後調用。
  • OnRenderImage(Pro Only):在場景徐然完成之後允許屏幕圖像後期處理調用。
  • OnGUI:爲了響應GUI事件,每幀會被調用多次(一般最低兩次)。佈局Layout和Repaint事件會首先處理,接下來處理的是是通過
    Layout和鍵盤/鼠標事件對應的每個輸入事件。
  • OnDrawGizmos:用於可視化的繪製一些小玩意在場景視圖中。

協同程序(Coroutines)

正常的協同程序更新是在Update函數返回之後運行。一個協同程序是可以暫停執行(yield)直到給出的依從指令(YieldInstruction )完成,寫成的不同運用:

  • yield:在所有的Update函數都已經被調用的下一幀該協程將持續執行。
  • yield WaitForSeconds:一段指定的時間延遲之後繼續執行,在所有的Update函數完成調用的那一幀之後。
  • yield WaitForFixedUpdate:所有腳本上的FixedUpdate函數已經執行調用之後持續。
  • yield WWW:在WWW下載完成之後持續。
  • yield StartCoroutine:協同程序鏈,將會等到MuFunc函數協程執行完成首先。

銷燬(When the Object is Destroyed)

  • OnDestory:這個函數在會在一個對象銷燬前一幀調用,會在所有幀更新一個對象存在的最後一幀之後執行,對象也許會響應Object.Destroy 或一個場景關閉時被銷燬。

退出遊戲(When Quitting)
這些函數會在你場景中所有的激活的物體上調用:

  • OnApplicationQuit:這個函數在應用退出之前的所有遊戲物體上調用,在編輯器(Editor)模式中會在用戶停止PlayMode時調用,在網頁播放器(web player)中會在網頁視圖關閉時調用。

  • OnDisable:當行爲變爲非啓用(disable)或非激活(inactive)時調用。

不對的地方希望大神指導,本文並非原創,爲方便以後查閱。

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