unity3D技術之事件函數的執行順序[轉]


unity3D技術之事件函數的執行順序

轉自http://www.yxkfw.com/?p=13703

 

unity的腳本,有大量的腳本執行按照預先確定的順序執行的事件函數。此執行順序說明如下:

  • Editor

  • Reset: Reset調用來初始化腳本的屬性,當它第一次附加到該對象,並且使用Reset命令時。

    第一次Scene Load

scene啟動 (一次為每個場景中的對象) 時,會調用這些函數。

  • Awake:此函數始終是開始任何職能之前調用,並且也是在一個預置實例化之后。(如果一個游戲對象處於非活動狀態,Awake不會被調用當被激活時 或者一個附加到游戲對象的任何腳本中這個函數會被調用。

  • OnEnable:(如果對象處於活動狀態時被調用):在對象被啟用后,將調用此函數。發生這種情況是在創建一個MonoBehaviour實例時,例如當加載一個level或游戲對象帶有腳本組件被實例化。

請注意對於對象添加到場景,所有腳本的清醒和 OnEnable函數將被調用之前啟動、更新、 等統稱為其中任何。當然,這不能強制執行時在游戲過程中實例化對象。

在第一幀更新之前

  • Start: Start第一幀更新僅當enabled了腳本實例之前,將調用 start。

為對象添加到場景,開始將對所有腳本更新之前,調用函數等統稱為其中任何。當然,這不能強制執行時在游戲過程中實例化對象。

幀之間

  • OnApplicationPause:這稱為框架末尾暫停檢測到,有效地之間正常的幀更新。OnApplicationPause調用,允許的比賽來證明表明暫停的狀態的圖形后,將發出一個額外的幀。

Update Order

當游戲邏輯和交互,動畫,相機位置,等您要跟蹤的時有幾個不同的事件,您可以使用。常見的模式是執行大多數任務里面的更新功能,但也有其他可以使用的函數。

  • FixedUpdate:FixedUpdate通常被稱為比更新更頻繁。它可以被多次調用每幀,如果幀率偏低,它可能不根本被稱為幀之間如果幀率較高。FixedUpdate后立即發生的所有物理計算和更新。當應用在FixedUpdate內的運動計算,你不需要將你的Time.deltaTime的值相乘。這是因為在一個可靠的定時器,獨立的幀速率上調用FixedUpdate。

  • Update:Update每幀調用一次。它是主要的主力框架更新的功能。

  • LateUpdate:LateUpdate是每幀,一次調用更新完畢后。LateUpdate開始時,將會完成在更新中執行的任何計算。常用的LateUpdate將以下的第三人稱視角。如果你使你的性格,並且動轉內更新,則可以在LateUpdate中執行所有攝像機的平移和旋轉變換計算。這將確保該字符已經完全之前相機跟蹤它的位置。

    呈現

  • OnPreCull:在相機中挑選出現場之前調用。撲殺確定哪些對象是可見的相機。只是在撲殺發生之前,將調用消隱。

  • OnBecameVisible/OnBecameInvisible:當對象變為可見/不可見的任何相機時調用。

  • OnWillRenderObject:每個攝像頭調用一次,如果對象是可見。

  • OnPreRender:在相機開始渲染場景之前調用。

  • OnRenderObject:所有普通的場景渲染完成后,調用你可以使用 GL類或 Graphics.DrawMeshNow,在這一點上繪制自定義幾何。

  • OnPostRender:在相機完成渲染場景之后調用。

  • OnRenderImage (僅限專業版):在場景渲染完成允許屏幕圖像的后處理后調用。

  • OnGUI:每幀響應 GUI事件調用多次。布局和重繪事件處理第一,緊接着的布局和鍵盤/鼠標的事件,為每個輸入事件。

  • OnDrawGizmos用於可視化用於場景視圖中繪制小玩意。

    協同程序

更新函數返回后運行正常的協程的更新。協同是一個函數,可以暫停其執行 (收益率),直到完成給定的YieldInstruction。不同用途的協同程序:

  • yield后所有的更新功能已呼吁下一幀,將繼續協同。

  • yieldWaitForSeconds在指定的時間延遲之后,繼續后所有的更新功能一直呼吁的框架

  • yieldWaitForFixedUpdate在所有的 FixedUpdate被稱為對所有腳本后繼續

  • yield WWW在WWW下載已完成后繼續。

  • yieldStartCoroutine鏈協同,並將等待 MyFunc協同完成第一次。

    當對象被銷毀

  • OnDestroy:所有幀更新的對象的存在 (對象可能毀於響應 Object.Destroy或一幕結束時) 的最后一幀后,將調用此函數。

    退出時

在你的場景中的所有活動對象上得到調用這些函數:

  • OnApplicationQuit:在應用程序退出之前,在所有的游戲物體上調用此函數。在編輯器中時用戶停止攻擊性影響調用。在網絡播放器時關閉了 web視圖調用。

  • OnDisable:調用此函數時的行為變得殘疾人士或非活動狀態。

    腳本生命周期流程圖

下面的關系圖概述訂購和重復事件函數在腳本的一生。

 

 

Update
當MonoBehaviour啟用時,其Update在每一幀被調用。
LateUpdate
當Behaviour啟用時,其LateUpdate在每一幀被調用。
FixedUpdate
當MonoBehaviour啟用時,其 FixedUpdate 在每一幀被調用。
Awake
當一個腳本實例被載入時Awake被調用。
Start
Start僅在Update函數第一次被調用前調用。
Reset
重置為默認值。
OnMouseEnter
當鼠標進入到GUIElement(GUI元素)或Collider(碰撞體)中時調用OnMouseEnter。
OnMouseOver
當鼠標懸浮在GUIElement(GUI元素)或Collider(碰撞體)上時調用 OnMouseOver .
OnMouseExit
當鼠標移出GUIElement(GUI元素)或Collider(碰撞體)上時調用OnMouseExit。
OnMouseDown
當鼠標在GUIElement(GUI元素)或Collider(碰撞體)上點擊時調用OnMouseDown。
OnMouseUp
當用戶釋放鼠標按鈕時調用OnMouseUp。
OnMouseUpAsButton
OnMouseUpAsButton只有當鼠標在同一個GUIElement或Collider按下,在釋放時調用。
OnMouseDrag
當用戶鼠標拖拽GUIElement(GUI元素)或Collider(碰撞體)時調用 OnMouseDrag 。
OnTriggerEnter
當Collider(碰撞體)進入trigger(觸發器)時調用OnTriggerEnter。
OnTriggerExit
當Collider(碰撞體)停止觸發trigger(觸發器)時調用OnTriggerExit。
OnTriggerStay
當碰撞體接觸觸發器時,OnTriggerStay將在每一幀被調用。
OnCollisionEnter
當此collider/rigidbody觸發另一個rigidbody/collider時,OnCollisionEnter將被調用。
OnCollisionExit
當此collider/rigidbody停止觸發另一個rigidbody/collider時,OnCollisionExit將被調用。
OnCollisionStay
當此collider/rigidbody觸發另一個rigidbody/collider時,OnCollisionStay將會在每一幀被調用。
OnControllerColliderHit
在移動的時,當controller碰撞到collider時OnControllerColliderHit被調用。
OnJointBreak
當附在同一對象上的關節被斷開時調用。
OnParticleCollision
當粒子碰到collider時被調用。
OnBecameVisible
當renderer(渲染器)在任何相機上可見時調用OnBecameVisible。
OnBecameInvisible
當renderer(渲染器)在任何相機上都不可見時調用OnBecameInvisible。
OnLevelWasLoaded
當一個新關卡被載入時此函數被調用。
OnEnable
當對象變為可用或激活狀態時此函數被調用。
OnDisable
當對象變為不可用或非激活狀態時此函數被調用。
OnDestroy
當MonoBehaviour將被銷毀時,這個函數被調用。
OnPreCull
在相機消隱場景之前被調用。
OnPreRender
在相機渲染場景之前被調用。
OnPostRender
在相機完成場景渲染之后被調用。
OnRenderObject
在相機場景渲染完成后被調用。
OnWillRenderObject
如果對象可見每個相機都會調用它。
OnGUI
渲染和處理GUI事件時調用。
OnRenderImage
當完成所有渲染圖片后被調用,用來渲染圖片后期效果。
OnDrawGizmosSelected
如果你想在物體被選中時繪制gizmos,執行這個函數。
OnDrawGizmos
如果你想繪制可被點選的gizmos,執行這個函數。
OnApplicationPause
當玩家暫停時發送到所有的游戲物體。
OnApplicationFocus
當玩家獲得或失去焦點時發送給所有游戲物體。
OnApplicationQuit
在應用退出之前發送給所有的游戲物體。
OnPlayerConnected
當一個新玩家成功連接時在服務器上被調用。
OnServerInitialized
當Network.InitializeServer被調用並完成時,在服務器上調用這個函數。
OnConnectedToServer
當你成功連接到服務器時,在客戶端調用。
OnPlayerDisconnected
當一個玩家從服務器上斷開時在服務器端調用。
OnDisconnectedFromServer
當失去連接或從服務器端斷開時在客戶端調用。
OnFailedToConnect
當一個連接因為某些原因失敗時在客戶端調用。
OnFailedToConnectToMasterServer
當報告事件來自主服務器時在客戶端或服務器端調用。
OnMasterServerEvent
當報告事件來自主服務器時在客戶端或服務器端調用。
OnNetworkInstantiate
當一個物體使用Network.Instantiate進行網絡初始化時調用。
OnSerializeNetworkView
在一個網絡視圖腳本中,用於自定義變量同步

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM