Unity基礎-指令碼生命週期

小小肥宅發表於2021-05-06

理解Unity指令碼的生命週期對遊戲開發很重要,這篇文章對生命週期做一個記錄和總結。Unity的指令碼生命週期(訊息),也就是在指令碼執行時,自動並且按順序執行的一系列函式。在unity官網中有對生命週期詳細的介紹https://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時呼叫;

相關文章