理解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設定
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時呼叫;