Unity 可视化编辑工具 树节点 Tree Node Editor 四
接上一篇Unity Behavior Tree Editor 行为树编辑器实现 三
上一篇主要讲解编辑器的使用,像关于自定义条件节点和行为节点是如何添加的等一些问题这一篇给与说明。
1.一般情况下,组合节点和修饰节点是不需要修改添加的,而条件节点和行为节点会根据需求变化不断添加。
打开 BehaviorConfigNode.cs
组合节点添加在 BehaviorConfigNode.PrimaryNode() 函数中
如下
Config<NodeSelect>("选择节点", (int)NODE_TYPE.SELECT);
自定义节点
行为节点继承 ActionBase
条件节点继承 ConditionBase
在 BehaviorConfigNode.Init()
函数中添加自定义的行为、条件节点
Config<PlayerAttackAction>("Player/攻击");
为了方便为某些节点添加默认参数,可以在
BehaviorConfigNode.ConfigDefaultParameter<T>(List<string> parameterList) where T : NodeBase, new()
函数中添加
2.扩展:动态子树
当一个角色在不同等级或者条件下,需要多种不同的AI配置,可以使用动态子树,然后通过代码逻辑动态的替换为不同的 AI 子树。
添加方法如下:
定义 子类 继承 NodeSubTreeDynamicBase
然后添加到 BehaviorConfigNode.PrimaryNode()
重写 CalculateNewSubTree()
方法,在该方法中判断当前要使用哪个子树配置文件,然后调用 SetSubTreeConfig(string config)
方法,如下
3.行为树编辑完毕,项目中如何使用?
在打开项目附带的 Human Scene,即可运行查看AI效果
(1)ConfigLoad
类加载配置文件 Assets\SubAssets\BehaviorTree\Resources\behavior_tree_config.bytes
(2)BehaviorData
类解析配置文件
(3)SpriteManager
为 BaseSprite
的管理类,
(4)BaseSprite.Init
方法中实例化 BTConcrete
(行为树实例)
(5)SpriteBTUpdateManager
为 行为树的管理类
在 SpriteManager
添加 BaseSprite
的时候,将 BaseSprite
的 BTConcrete
添加到 SpriteBTUpdateManager
在 SpriteManager.Update
中驱动 SpriteBTUpdateManager.Update
在 SpriteManager
删除 BaseSprite
的时候,将 BaseSprite
的BTConcrete
从 SpriteBTUpdateManager
移除
(6)ActionBase、ConditionBase、NodeSubTreeDynamicBase
继承了 IBTActionOwner
,可以根据自己项目修改
项目地址依然粘贴在下面,如何让 AI 动起来,在下篇中讲解