1. 程式人生 > >Unity3D中事件函式的執行順序

Unity3D中事件函式的執行順序

OnPreCull:  在相機剔除場景前被呼叫,剔除決定了哪些物體在相機中是可見的。假如要修改相機的視覺化引數(比如FOV,Transform等),就應該在這個函式中進行修改,此後場景中GameObject的可見性就取決於相機的引數了。OnBecameVisible/OnBecameInvisible:當GameObject在任何相機中變得可見/不可見時被呼叫,該訊息被髮送到任何掛在渲染器上的指令碼。使用這兩個函式可以避免不必要的計算,僅當GameObject可見時才進行相應的計算。它們可以是協程,簡單地使用yield 即可,當在編輯器中執行時,場景檢視攝像機也會導致它們被呼叫。OnWillRenderObject:如果物體可見並且指令碼是enabled,在渲染每個經過剔除操作之後的物體之前,它將為每個相機呼叫一次。
OnPreRender:僅當指令碼掛在相機上並且enabled時,則在相機開始渲染場景之前被呼叫。假如在這個函式中修改了相機的視覺化引數(比如FOV),那麼這些引數只會在下一幀中起到作用。該函式可以是協程,僅在函式中使用yield即可。OnRenderObject:在所有固定場景渲染之後被呼叫,此時你可以使用GL類函式或者Graphics.DrawMeshNow來畫自定義的幾何體。該函式和OnPostRender相似,除了一點:不論指令碼掛在相機上與否,OnRenderObject都會在任何GameO上被呼叫。OnPostRender:在相機完成場景的渲染後被呼叫。與OnRenderObject不同,僅當指令碼掛在相機上並且是enabled時,該函式才會被呼叫。假如想要在所有相機和GUI渲染之後做操作,使用
WaitForEndOfFrame協程。
OnRenderImage(Pro only):在場景渲染完成後被呼叫,用於對螢幕的影象進行後處理,該訊息被髮送到掛到相機上的所有指令碼。該函式允許利用基於shader的過濾器對最終影象進行處理,傳入源渲染紋理,終止於目標渲染紋理;當相機有多個影象過濾器時,影象順序被處理,前一個過濾器的目標渲染紋理作為下一個過濾器的源渲染紋理。OnGUI:為響應GUI事件,該函式每幀被呼叫多次,每個事件就呼叫一次;執行時先響應佈局和重繪事件,隨後是為每一次的輸入事件執行佈局和鍵盤/滑鼠事件。OnDrawGizmos:為了視覺化的目的,從而在場景檢視中繪製小圖示。該函式使用相對於Scene檢視的滑鼠的位置,允許快速挑選場景中重要的GameObject,當然假如元件在inspector中collapsed,則該函式就不會被呼叫。

協程Coroutines:

       正常情況下協程是在Update函式返回時執行。協程的功能是,延緩其執行(yield) ,直到給定的YieldInstruction完成。協程的不同用途: