UE4-AI行爲樹編輯器功能擴展

虛幻4引擎的行爲樹編輯器只支持在單顆行爲樹中查找某一節點。項目開發後期行爲樹節點及黑板變量龐雜,特別是在多人開發製作AI行爲樹時,若前期文檔不夠完善,後期想要對之前的節點或黑板變量修改,很難知道是否還在使用以及何時、何處使用,或是早已廢棄冗餘。只能手動查看所有行爲樹資源比對,費時費力並且會帶來一定誤刪、誤改風險。

遂對引擎行爲樹編輯器功能進行了擴展,現編輯器支持以下功能:

  1. 單顆行爲樹中查找某一節點是否被引用過,並支持查找結果在行爲樹中高亮顯示,點擊跳轉到節點位置;
  2. 單顆行爲樹中查找某一黑板變量是否被引用過,並支持查找結果在行爲樹中高亮顯示,點擊跳轉到引用節點位置;
  3. 全局查找某一黑板變量都被哪些行爲樹的哪些節點引用過,並統計該黑板變量被節點、服務及裝飾器所引用的總次數及相關資源路徑信息;
  4. 全局查找某一節點都被哪些行爲樹引用過,並統計該節點被引用的總次數及相關行爲樹資源路徑信息。

看過UE4源碼的應該知道,AI行爲樹編輯器相關代碼在UE/Engine/Source/Editor/BehaviorTreeEditor目錄下,我主要修改了引擎FindInBT、BehaviorTreeBlackView、BehaviorTreeBlackEditor、BehaviorTreeEditorCommands幾個文件,當然你也可以將以上擴展功能做到別的地方修改引擎編輯器其他類代碼。

實現思路也不復雜,當打開單顆行爲樹的搜索面板(Ctrl+F鍵)時,FindInBT類中的Graph保存了當前打開的行爲樹信息,可以得到行爲樹中的所有Node(只包括CompositeNode和TaskNode),繼而通過CompositeNode和TaskNode可以獲取它們身上添加的Service和Decorator。遍歷所有的CompositeNode、TaskNode、Service和Decorator,通過PropertyLink可得到這些節點添加UPROPERTY修飾符的變量的反射信息,判斷其類型爲黑板變量類型並用輸入的tocken與黑板變量名作比較即可。
當需要整個項目全局搜索時,通過Library可獲取所有行爲樹資源,然後再按上述方法做匹配查找即可。

另外,編輯器裏創建顯示彈窗window可以參考虛幻slate的內容,slate即UMG的底層實現,這裏不贅述。

以下貼一些上述功能實現的部分主要僞代碼:

1.通過Graph遍歷所有CompositeNode、TaskNode、Service和Decorator:

2.通過PropertyLink獲取所有UPROPERTY修飾符變量的信息並與查詢tocken比對:

3.通過Library查找項目中所有行爲樹資源:

 

引擎行爲樹編輯器有了上述的引用查找及統計功能,在項目資源龐雜的情況下仍可一目瞭然哪些節點或黑板變量被哪些資源引用,哪些節點的使用頻率較高、哪些黑板變量早已廢棄冗餘等等,能更加方便對AI行爲樹資源的管理和維護。

 

以上。

 

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