­

Unity基礎-腳本生命周期

理解Unity腳本的生命周期對遊戲開發很重要,這篇文章對生命周期做一個記錄和總結。Unity的腳本生命周期(消息),也就是在腳本運行時,自動並且按順序執行的一系列函數。在unity官網中有對生命周期詳細的介紹//docs.unity3d.com/cn/current/Manual/ExecutionOrder.html

場景開始階段

Awake:在遊戲物體載入時執行一次,(在物體啟用的狀態下)。如果遊戲物體未啟用,則會在啟用後調用Awake;

onEnable:物體每次啟用時調用OnEnable;

Start:物體載入之後,腳本啟用之後執行一次Start。

onlevelwasloaded:關卡場景載入完成後會調用此函數。只有通過SceneManager.LoadScene()載入的場景會調用此函數。

gameObject.SetActive(true);//程式碼啟用物體方法
this.enabled = true;//程式碼啟用腳本方法

總結:Awake和Start方法都是載入場景後只執行一次,因此作用都是充當構造函數,初始化數據成員。在執行順序上Awake在Start前面調用。可以通過onlevelwasloaded告知遊戲已載入新關卡。

物理階段

FixedUpdate:腳本啟用後,固定時間執行,適用於物理的計算和更新,不會受到渲染的影響;默認是0.02s,可以通過Edit/Project Setting設置
image

OnCollisionXXX:碰撞事件,滿足碰撞條件時調用;

OnTriggerXXX:觸發,當滿足觸發條件時調用

邏輯階段

Update:渲染幀,腳本啟用後,每次渲染場景調用一次。幀率快慢與設備性能和渲染量有關。

LateUpdate:在update後調用。LateUpdate 開始時,在 Update 中執行的所有計算便已完成。LateUpdate 的常見用途是跟隨第三人稱攝像機。如果在 Update 內讓角色移動和轉向,可以在 LateUpdate 中執行所有攝像機移動和旋轉計算。這樣可以確保角色在攝像機跟蹤其位置之前已完全移動。

場景渲染

OnBecameVisible:噹噹前Mesh Renderer在任意相機上可見時調用;

OnBecameInvisible:噹噹前Mesh Renderer在任意相機上不可見時調用;

結束階段

OnDisable:對象被禁用或處於非活動狀態時,調用此函數。

OnDestroy:腳本被銷毀或遊戲對象被銷毀時調用

OnApplicationQuit:在退出應用程式之前在所有遊戲對象上調用此函數。在編輯器中,用戶停止播放模式時,調用函數。

滑鼠輸入事件

OnMouseDown:滑鼠按下當前Collider時調用;
OnMouseEnter:滑鼠進入當前Collider時調用;
OnMouseExit:滑鼠離開當前Collider時調用;
OnMouseUp:滑鼠抬起當前Collider時調用;
OnMouseOver:滑鼠經過當前Collider時調用;