UE4 行爲樹裝飾器(Decorator)簡單實用說明(1)

      在行爲樹標準模型中,條件語句爲 Task 葉節點,除成功和失敗外不執行任何操作。雖然也可以使用傳統的條件 tasks,但還是強烈推薦您使用 Decorator 系統作爲條件語句。

使用 decorators 而非 tasks 作爲條件語句有多個明顯優點。

       首先,條件 decorators 使行爲樹 UI 顯得更加直觀易讀。條件語句位於其所控制分支樹的根部,因此一旦條件語句未被滿足,便可直接看到樹的哪個部分被“關閉”。此外,所有葉節點均爲行動 tasks,因此更容易分辨樹在對哪些實際行動下達命令。 在傳統模型中,條件語句混於葉節點中,因此需要花更多時間分辨哪些葉節點是條件語句,哪些葉節點是行動。(UE4官方說明文檔中對Decorator的解釋) 


      在我使用過程中對裝飾器的理解是:裝飾器是UE4行爲樹的判定節點,簡單來講就是它用來判定行爲節點是否執行,以及行爲節點執行後的結果反饋和處理。

      當裝飾器作爲判定節點使用時候,通常我們要覆蓋重寫(Override) PerformConditionCheck或者PerformConditionCheckAI函數,我推薦使用後者,因爲後者自帶了2個參數, OwnerController(當前行爲樹所有者的控制器,也就是你運行的AIController),ControllerPawn(當前行爲樹所控制的pawn,簡單來講就是你要控制的Actor),比如我從AIController派生了一個MyAIController,控制了一個叫MyAIActor的角色,那麼使用時候就很方便,直接把參數OwnerController 轉換爲MyAIController(CastToMyAIController),把ControllerPawn轉換爲MyAIActor(CastToMyAIActor)。


       這就是一個簡單的判定節點的裝飾器,當PerformConditionCheckAI 函數返回真時候,則其修飾的節點纔會運行,如果返回假,則下方節點就不再運行了

       如上圖,如果BTDecorator_IsAround節點返回值爲false,則就不會執行BTTask_TestAround節點了。下一篇再繼續講裝飾器的另外一個作用:行爲節點執行後的結果反饋和處理。



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