(本博文可能比较老,如果发现插件运行不起来,那么可能是插件需要的U3D版,与你现在用着的不一兼容而导致)
在使用Unity 的插件中,官方提供的Assets Store中,提供了大量了资源下载,其中有一款,收费插件:Behavior Designer,这是收费的插件;
我让群友发了一份给我,这里不作商业应用;
Unity Behavior Designer 插件下载(点击)
不过这个插件,我在使用的时候,发现了一些问题:某个GameObject(MyPrefabObj)添加了BehaviorTree组件,添加自定义节点,该节并且公开部分字段;
在BehaviorDesigner视图的Inspector中设置了该节点的公开字段值之后,把这个GameObject(MyPrefabObj)设为预投之后;
然后使用代码:Instantiate方法实例该prefab(MyPrefabObj)后,发现,对应的BehaviorTree组件上对应的节点的公开字段值,又还原成未赋值状态;
Behavior Designer 的可视化编辑截图:
可以看到,左边的列表有好多种节点类类型;
粗略分为以下这几种:
各节点特性:
在子节点中,找一个Success的,就不再往下执行;
for (child in children) if (child.update() == Success) return Success; return Failure;
与选择节点的条件上相反吧,就是中子节点中,找一个Failure的,就不再往下执行了;
除了以上这种特性,比较特殊的:要过了Conditions这关,再会处理Children;
onConditions(): for (condition in conditions) if (condition.excute() == Failure) return Failure; return Success; onChildren(): for (child in children) if (child.update() == Failure) return Failure; return Success; update: result = onCondition(); if (result == Success) return onChildren(); return result;
也就是上面我们所说的顺序节点中的条件节点,具体的返回:Success/Failure的话,得依你自己的判断而定;
最简单的节点,就是内部所有子节点都会执行一次;不管子节点的返回值,最终都会返回Success;
等等,看你对自己的节点扩展,与分类的种类而定吧;
在指定时间后,就会运行指定nextNode节点;
对:中继节点.enable = !enable控制类;就是不断的开/关;
只有enable == true时,子节点才会继续执行,通常使用:WaitNode, ToggleNode来搭配使用;
上篇FSM的,感觉没啥人想了解;
这篇的BT(Behavior Tree)就不详细解说了,更何况,现在都是把一些空闲的时间挤出写来的;
从简单的DEMO中学习设计;是比较容易的;
如果从一个比较大的成品去研究,就比较麻烦了;
直接上代码,自己看去。
BehaviorTestingProject
BehaviorTestingProject_1.1(感谢:artist963 兄,只在原来基础上优化代码、结构,并放一些BT逻辑封装成类,方便阅读、理解)
这个DEMO中,是简单演示了,BOSS,寻找目标,靠近目标,自动攻击,与巡逻;
行为树结构大概是这样:
像上面的AttackTarget(ActionNode)中,我们完全可以再写成另一个嵌套的BT去处理;
总之,BT可以应用在,逻辑复杂度很高的系统都可以比较清晰的简单化;
如:上面的BOSS AI;
或是,任务系统中的自动跑任务;
他就有点像,我们生活中的一些处理事件的逻辑整理,然后按逻辑先后,有条不紊的执行;