unity-默認函數的生命週期(執行順序)

概述

unity的API中詳細介紹了unity腳本默認函數的執行順序,點這裏訪問。這裏主要介紹下面這張圖:
生命週期

主要執行順序

編輯器->初始化->物理系統->輸入事件->遊戲邏輯->場景渲染->GUI渲染->物體激活或禁用->銷燬物體->應用結束

主要函數介紹

Reset是在用戶點擊檢視面板的Reset按鈕或者首次添加該組件時被調用。此函數只在編輯模式下被調用。Reset最常用於在檢視面板中給定一個最常用的默認值。


Awake用於在遊戲開始之前初始化變量或遊戲狀態。在腳本整個生命週期內它僅被調用一次.Awake在所有對象被初始化之後調用,所以你可以安全的與其他對象對話或用諸如 GameObject.FindWithTag 這樣的函數搜索它們。每個遊戲物體上的Awke以隨機的順序被調用。因此,你應該用Awake來設置腳本間的引用,並用Start來傳遞信息 ,Awake總是在Start之前被調用。它不能用來執行協同程序。


OnDisable不能用於協同程序。當對象變爲不可用或非激活狀態時此函數被調用。


Start在behaviour的生命週期中只被調用一次。它和Awake的不同是Start只在腳本實例被啓用時調用。你可以按需調整延遲初始化代碼。Awake總是在Start之前執行。這允許你協調初始化順序。


FixedUpdate ,當MonoBehaviour啓用時,其在每一幀被調用。處理Rigidbody時,需要用FixedUpdate代替Update。例如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate裏的固定幀,而不是Update中的幀。(兩者幀長不同)。


OnTriggerEnter可以被用作協同程序,在函數中調用yield語句。當Collider(碰撞體)進入trigger(觸發器)時調用OnTriggerEnter。


OnCollisionEnter相對於OnTriggerEnter,傳遞的是Collision類而不是Collider。Collision包含接觸點,碰撞速度等細節。如果在函數中不使用碰撞信息,省略collisionInfo參數以避免不必要的運算。注意如果碰撞體附加了一個非動力學剛體,只發送碰撞事件。可以被用作協同程序。


當鼠標在GUIElement(GUI元素)或Collider(碰撞體)上點擊時調用OnMouseDown


Update是實現各種遊戲行爲最常用的函數。


一個協同程序在執行過程中,可以在任意位置使用yield語句。yield的返回值控制何時恢復協同程序向下執行。協同程序在對象自有幀執行過程中堪稱優秀。協同程序在性能上沒有更多的開銷。StartCoroutine函數是立刻返回的,但是yield可以延遲結果。直到協同程序執行完畢。


LateUpdate是在所有Update函數調用後被調用。這可用於調整腳本執行順序。例如:當物體在Update裏移動時,跟隨物體的相機可以在LateUpdate裏實現。


渲染和處理GUI事件時調用。這意味着你的OnGUI程序將會在每一幀被調用。要得到更多的GUI事件的信息查閱Event手冊。如果Monobehaviour的enabled屬性設爲false,OnGUI()將不會被調用。


OnApplicationQuit,當用戶停止運行模式時在編輯器中調用。當web被關閉時在網絡播放器中被調用。

更多請訪問:unity聖典

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