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

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

編輯器(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()函數以前被調用,天然的,當一個物體在遊戲過程當中被實例化時這不能被強制執行。ui

在幀之間(In between frames)協程

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

更新順序(Update Order)對象

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

  • 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)時調用
相關文章
相關標籤/搜索