Hology
Hology 文檔
Hology 文檔
  • 👋歡迎來到Hology文檔
  • Getting started
    • Hology Engine簡介
    • 第一步指南
    • 編輯器基礎指南
      • 在場景中飛行
      • 放置物件
      • 選擇物件
      • 變換
      • 分組物件
      • 複製
    • 入門遊戲模板 - 第三人稱射擊遊戲
  • Tutorials
    • 滾球 - 遊戲玩法編程
    • 角色動畫程式設計
    • Character AI behavior
  • Release
    • 遊戲發行
      • Discord Activities
      • 臉書即時遊戲
      • 上傳至 Itch.io
      • 使用 GitHub Pages
      • 發布到Steam
      • iOS 和 Android
  • Assets
    • 3D模型
      • 客製化碰撞形狀
      • 材質自訂分配
    • 材質
    • 紋理
    • 預製體
  • Gameplay
    • 演員(Actors)
      • 創建演員類
      • 演員參數
      • Actor 元件
      • Actor 的生命週期
      • 生成 Actors
      • 移動 Actors
    • 服務
      • 載入資產
    • Player input
    • Collision detection
    • Physics
      • Physics body types
      • Applying forces
      • Ray casting
    • Trigger volumes
    • Character movement
    • Pointer events
    • Animation
      • Animation system
      • Character Animation
      • Animation State Machine
    • Sound
      • Audio parameter
    • 世界
    • Navigation
  • Shaders
    • 著色器介紹
    • Creating shaders
    • 著色器參數
    • Typescript shaders
      • Types
      • Math functions
      • Attributes
      • Varying
      • Uniforms
      • Textures
      • Arrays
      • Select
      • Lighting
    • Painted materials
    • Water shader tutorial
  • Level design
    • 地形雕刻
    • 地形繪製
    • Grass
  • User Interfaces
    • 創建用戶界面UI
    • 使用 React
    • VR
  • Visual Effects
    • 視覺效果簡介
    • 視覺特效資產
  • Integrations
    • Arcweave
由 GitBook 提供支持
在本页
  1. Gameplay
  2. 演員(Actors)

Actor 的生命週期

Actor 在其生命週期中會經歷一系列階段。了解這些階段以及在每個階段中可以或不可以執行的操作非常重要。

這些階段適用於 actor 本身以及其內部的元件。每個階段都會先應用於所有元件,然後再進入下一個階段。

  1. 建構(Construction)

    • 類被實例化,並調用構造函數(constructor)。

    • 使用 inject 和 attach 函數注入服務並附加元件。

    • 不要使用類中作為參數的屬性,因為它們的值此時尚未定義。

  2. 反序列化(Deserialisation)

    • 使用 attach 函數或 Attach 裝飾器設置的屬性將被賦值。

    • 在編輯器中配置的參數將被設置到 actor 和元件上。

  3. 初始化(Initialisation)

    • onInit 方法會在 actor 上調用,然後依次調用元件上的 onInit 方法。

    • onInit 方法可以是異步的,並且會同時執行。因此,避免依賴其他元件的 onInit 方法中的邏輯,因為它們完成的順序可能不可靠。

    • 可以使用類中的參數屬性,因為此時它們已被定義。

    • 設置訂閱並開始執行遊戲邏輯。

    • 如果某些元件無法在建構階段附加,則可以動態附加它們。使用 this.attach。

    • 不要使用 inject 或 attach 函數。

  4. 開始遊戲(Begin Play)

    • 當 actor 被生成到世界中時觸發。

    • onBeginPlay 方法會在 actor 上調用,然後依次調用元件上的 onBeginPlay 方法。這不會在編輯器中發生。

    • 利用此階段啟動遊戲玩法功能。

  5. 更新(Update)

    • 在每一幀渲染(rendered)之前調用 onUpdate 方法,此方法通常用於邏輯處理。

    • 執行可能需要變換渲染物件或其他視覺效果的功能。

    • 避免在此函數中創建僅供臨時使用的新物件。由於該函數執行頻率極高,記憶體分配和垃圾回收可能對性能產生顯著影響。

    • 避免將需要與渲染迴圈頻率不同步執行的功能放在更新階段。由於不同 actors 的 onUpdate 方法調用順序無法保證一致,因此同步多個 actors 的功能可能會很困難。建議依賴來自其他 actors、元件或系統發出的事件。

  6. 延遲更新(Late Update)

    1. 與 onUpdate 一樣,每幀調用一次,但會在所有 onUpdate 方法執行完畢後調用。

    2. 當您希望確保所有 onUpdate 函數完成後再執行某些代碼時,此方法非常有用。

    3. 例如相機操作或跟隨特定物體,尤其是在相機需要跟隨一個已在 onUpdate 方法中更新過的位置移動的物體時。

  7. 結束遊戲(End Play)

    • 當遊戲關閉或 actor 被移除時觸發。

    • onEndPlay 方法會在 actor 上調用,然後依次調用元件上的 onEndPlay 方法。這不會在編輯器中發生。

  8. 移除(Removal)

    1. Actor 從世界中移除並被釋放。

    2. 取消所有創建的訂閱。如果您使用 RxJs 創建訂閱,可以使用 .pipe(takeUntil(this.disposed)) 確保當 actor 被移除時自動取消訂閱。

上一页Actor 元件下一页生成 Actors

最后更新于1个月前