Actor 的生命週期
Actor 在其生命週期中會經歷一系列階段。了解這些階段以及在每個階段中可以或不可以執行的操作非常重要。
這些階段適用於 actor 本身以及其內部的元件。每個階段都會先應用於所有元件,然後再進入下一個階段。
建構(Construction)
類被實例化,並調用構造函數(constructor)。
使用
inject
和attach
函數注入服務並附加元件。不要使用類中作為參數的屬性,因為它們的值此時尚未定義。
反序列化(Deserialisation)
使用
attach
函數或Attach
裝飾器設置的屬性將被賦值。在編輯器中配置的參數將被設置到 actor 和元件上。
初始化(Initialisation)
onInit
方法會在 actor 上調用,然後依次調用元件上的onInit
方法。onInit
方法可以是異步的,並且會同時執行。因此,避免依賴其他元件的onInit
方法中的邏輯,因為它們完成的順序可能不可靠。可以使用類中的參數屬性,因為此時它們已被定義。
設置訂閱並開始執行遊戲邏輯。
如果某些元件無法在建構階段附加,則可以動態附加它們。使用
this.attach
。不要使用
inject
或attach
函數。
開始遊戲(Begin Play)
當 actor 被生成到世界中時觸發。
onBeginPlay
方法會在 actor 上調用,然後依次調用元件上的onBeginPlay
方法。這不會在編輯器中發生。利用此階段啟動遊戲玩法功能。
更新(Update)
在每一幀渲染(rendered)之前調用
onUpdate
方法,此方法通常用於邏輯處理。執行可能需要變換渲染物件或其他視覺效果的功能。
避免在此函數中創建僅供臨時使用的新物件。由於該函數執行頻率極高,記憶體分配和垃圾回收可能對性能產生顯著影響。
避免將需要與渲染迴圈頻率不同步執行的功能放在更新階段。由於不同 actors 的
onUpdate
方法調用順序無法保證一致,因此同步多個 actors 的功能可能會很困難。建議依賴來自其他 actors、元件或系統發出的事件。
延遲更新(Late Update)
與
onUpdate
一樣,每幀調用一次,但會在所有onUpdate
方法執行完畢後調用。當您希望確保所有
onUpdate
函數完成後再執行某些代碼時,此方法非常有用。例如相機操作或跟隨特定物體,尤其是在相機需要跟隨一個已在
onUpdate
方法中更新過的位置移動的物體時。
結束遊戲(End Play)
當遊戲關閉或 actor 被移除時觸發。
onEndPlay
方法會在 actor 上調用,然後依次調用元件上的onEndPlay
方法。這不會在編輯器中發生。
移除(Removal)
Actor 從世界中移除並被釋放。
取消所有創建的訂閱。如果您使用 RxJs 創建訂閱,可以使用
.pipe(takeUntil(this.disposed))
確保當 actor 被移除時自動取消訂閱。
最后更新于