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行为树资源的管理和维护。

 

以上。

 

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