经过前面的文章,已经把行为树中的四种基本类型节点介绍了下.接下来可以整理一下,打印一下整棵行为树.注意点如下: 1.可以把BTBehaviorTree也当作一种节点,这样就可以方便地进行行为树嵌套了 2.可以在BTBehaviorTree中的SetStartTask.BTParentTask中的AddChild,即在设置节点和添加节点时对节点的信息进行打印 以下面这棵行为树为例: BTTask.lua BTTask = {}; local this = BTTask; function this…
参考链接:https://blog.csdn.net/u012740992/article/details/79366251 在行为树中,有四种最基本的节点,其继承结构如下: Action->Task Conditional->Task Decorator->ParentTask->Task Composite->ParentTask->Task 对于整棵树,从上往下,可以对其进行分层,从0开始递增:对于树中的子树,从左到右,可以对其子节点标记索引. 那么,这里的整棵树…
之前运行的行为树,都是一颗总树,那么实际上会有很多的总树,因此需要对行为树进行管理. BTBehaviorManager.lua BTBehaviorManager = {}; local this = BTBehaviorManager; this.isEachFrameCall = false;--是否是每帧调用 this.printTreeStr = ""; this.trees = {}; function this.RunTree() if (isEachFrameCall)…
在上一篇的基础上,可以测试下行为树的嵌套,所谓的行为树嵌套,就是在一棵行为树下的某一个分支,接入另一棵行为树. 以下面这棵行为树为例: TestBehaviorTree2.lua TestBehaviorTree2 = BTBehaviorTree:New(); local this = TestBehaviorTree2; this.name = "TestBehaviorTree2"; function this:New() local o = {}; setmetatable(o…
BehaviorDesigner是Unity上的一款行为树插件,不过这个插件是用C#编写的,编写出来的行为树也是依赖于C#的,不利于热更,所以有必要写一个lua版本的. 首先下载BehaviorDesigner这个插件,其中部分源码编译在Behavior Designer\Runtime\BehaviorDesignerRuntime.dll中,可以使用.NET Reflector这个工具进行反编译,然后将反编译后的类文件保存,然后用VS打开,就可以方便地查看源码啦.这个插件是自带pdf文档的,…
Sequence的继承关系如下: Sequence->Composite->ParentTask->Task 上一篇已经实现了简单版本的ParentTask和Task(基于Behavior Designer的源码),那么接下来看下Composite和Sequence. 1.Composite:表明该节点是组合节点,无特殊作用. 2.Sequence: 成员: currentChildIndex:当前运行的子节点索引 executionStatus:当前运行的子节点状态 方法: CanEx…
在行为树中,需要扩展的主要是行为节点和条件节点.一般来说,每当要创建一个节点时,就要新建一个节点文件.而对于一些简单的行为节点和条件节点,为了去掉新建文件的过程,可以写一个通用版本的行为节点和条件节点,以传入方法的方式来避免新建文件. BTActionUniversal.lua --[[ 通用Action节点 --]] BTActionUniversal = BTAction:New(); local this = BTActionUniversal; this.name = "BTAction…
先看一下之前的条件节点是怎么设计的: BTConditional.lua BTConditional = BTTask:New(); local this = BTConditional; this.taskType = BTTaskType.Conditional; function this:New() local o = {}; setmetatable(o, self); self.__index = self; return o; end BTIsNullOrEmpty.lua --[…
先看一下之前的行为节点是怎么设计的: BTAction.lua BTAction = BTTask:New(); local this = BTAction; this.taskType = BTTaskType.Action; function this:New() local o = {}; setmetatable(o, self); self.__index = self; return o; end BTLog.lua --[[ 参考BehaviorDesigner-Action-Lo…
条件节点和行为节点,这两种节点本身的设计比较简单,项目中编写行为树节点一般就是扩展这两种节点,而Decorator和Composite节点只需要使用内置的就足够了. 它们的继承关系如下: Conditional->Task Action->Task 代码如下: BTAction.lua BTAction = BTTask:New(); local this = BTAction; function this:New() local o = {}; setmetatable(o, self);…