Unity腳本生命週期

Unity腳本生命週期

腳本生命週期

這裏寫圖片描述

  • 我們首先介紹 Reset 函數,使用 Unity 編輯器將腳本綁定到遊戲對象時,編輯器調用 Reset 函數。接下來下面遊戲運行時腳本函數的調用順序。

  • 首先是初始化階段

    • 第一個被調用的函數是 Awake 函數,它在腳本綁定到的遊戲對象激活時執行。
      • 注意:即使包含 Awake 函數的腳本處於已禁用狀態,該腳本中的 Awake 函數也會被 Unity 調用。
    • 初始化階段第二個執行的函數是 OnEnable,當腳本啓用時該函數執行一次。
    • 初始化階段最後調用 Start 函數,它在 OnEnable 函數調用後執行。
      • 注意: Start 在每個場景中只執行一次;如果在場景中已經執行過 Start 函數,即使 OnEnable 函數再次執行,Start 函數也不會執行。
  • 初始化階段完成後進入遊戲腳本的循環階段,首先介紹物理循環,物理循環用於處理遊戲中與物理相關的邏輯。

    • FixedUpdate 函數是物理循環中最先執行的函數,它每隔固定時間執行一次。我們通常與把物理模擬有關的代碼,寫在 FixedUpdate 函數中,比如給遊戲對象添加力。
    • 接下來是 OnTrigger 函數,它用於 Trigger 觸發器檢測 每隔固定時間檢測一次。 觸發器檢測函數包括 OnTriggerEnter、OnTriggerStay、OnTriggerExit 分別在當物體進入、停留、離開 Trigger 觸發器範圍時執行。
    • 接下來是 OnCollision 碰撞檢測函數,它用於 Collider 碰撞體的相關檢測,每隔固定時間檢測一次。 碰撞檢測函數包括 OnCollisionEnter、OnCollisionStay、OnCollisionExit,當物體進入、停留、離開 Collider 碰撞體範圍時執行。 OnTrigger 函數與 OnCollision 函數通常用於與碰撞檢測有關的遊戲邏輯。
  • 接下來是 OnMouse 函數,處理鼠標的輸入事件。

  • 下面是遊戲邏輯循環:

    • 首先執行 Update 函數,它在每幀執行一次,該函數主要處理遊戲對象在遊戲世界的行爲邏輯,例如遊戲角色的控制和遊戲狀態的控制。
    • 然後是 LateUpdate 函數,它也是每幀執行一次,在 Update 函數後執行。 在實際開發過程中 Update 函數與 LateUpdate 函數通常共同使用。例如在第三人稱射擊遊戲中,我們在 Update 函數中處理玩家角色的移動,在 LateUpdate 函數中處理攝像機跟隨玩家,這樣能防止攝像機出現抖動現象。
    • 遊戲邏輯程序循環結束後執行 OnGUI 函數。 OnGUI 函數每幀可執行多次,用於繪製 Unity 的圖形用戶界面。
  • 在腳本被禁用前,Unity 循環調用 PPT 中紅色橢圓內的函數序列,實現遊戲對象的正常更新 。腳本被禁用時,腳本跳出之前紅色橢圓內的函數循環,調用 OnDisable 函數,等待下一個命令。 若重新啓用腳本 腳本將從 OnDisable 函數跳轉至 OnEnable 函數。跳轉完成後,腳本按照生命週期中函數執行順序,循環運行,直到下一次腳本被禁用。

  • 當腳本 被解除綁定時,Unity 調用 OnDestroy 函數,腳本的生命週期結束 。

多腳本執行順序

遊戲場景中往往存在多個 Unity 腳本,這些腳本都包含了 Unity 的事件函數,如 Start 函數和 Update 函數 假設有 ScriptA、 ScriptB、 ScriptC 三個腳本 如何確定這三個腳本的執行順序?

  • 遵循一個棧的結構:最先綁定到場景對象中的腳本,最後執行。
  • MonoManager窗口可以用於管理腳本之間的執行順序。
    • 值只代表優先級,不代表延遲。
    • 值越小,優先級越高,越早執行。
    • 值設爲0,腳本將在Default Time執行,該腳本在列表中消失。
    • 優先級相等的腳本,採取默認的執行順序,最先設置的腳本最後執行。

腳本調試

使用腳本在控制檯輸出相關信息:

Debug.Log();       //消息       
Debug.LogWarning();//警告
Debug.LogError();  //錯誤

reference:

基於Unity引擎的遊戲開發基礎:第四周

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