lua行为树设计与实现】的更多相关文章

项目需要,之前行为树用的是behaviorDesigner,要改成纯lua的 我先做了一版用递归实现,代码可读性高但是中断机制实现起来比较复杂,而且创建自定义action重写方法时需要调用父类的方法, 如果忘了调用就会出现问题, 所以改成了用栈模拟递归. 用栈模拟递归好处在于效率高,并且容易控制,用非递归实现后自定义一个行为树节点,那么该节点不用知道父亲的方法,只要做好自己的事情就OK了 完整测试工程已上传到了github:https://github.com/MCxYY/LuaBT 行为树整体…
条件节点和行为节点,这两种节点本身的设计比较简单,项目中编写行为树节点一般就是扩展这两种节点,而Decorator和Composite节点只需要使用内置的就足够了. 它们的继承关系如下: Conditional->Task Action->Task 代码如下: BTAction.lua BTAction = BTTask:New(); local this = BTAction; function this:New() local o = {}; setmetatable(o, self);…
Sequence的继承关系如下: Sequence->Composite->ParentTask->Task 上一篇已经实现了简单版本的ParentTask和Task(基于Behavior Designer的源码),那么接下来看下Composite和Sequence. 1.Composite:表明该节点是组合节点,无特殊作用. 2.Sequence: 成员: currentChildIndex:当前运行的子节点索引 executionStatus:当前运行的子节点状态 方法: CanEx…
之前运行的行为树,都是一颗总树,那么实际上会有很多的总树,因此需要对行为树进行管理. BTBehaviorManager.lua BTBehaviorManager = {}; local this = BTBehaviorManager; this.isEachFrameCall = false;--是否是每帧调用 this.printTreeStr = ""; this.trees = {}; function this.RunTree() if (isEachFrameCall)…
先看一下之前的条件节点是怎么设计的: 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…
在上一篇的基础上,可以测试下行为树的嵌套,所谓的行为树嵌套,就是在一棵行为树下的某一个分支,接入另一棵行为树. 以下面这棵行为树为例: TestBehaviorTree2.lua TestBehaviorTree2 = BTBehaviorTree:New(); local this = TestBehaviorTree2; this.name = "TestBehaviorTree2"; function this:New() local o = {}; setmetatable(o…
经过前面的文章,已经把行为树中的四种基本类型节点介绍了下.接下来可以整理一下,打印一下整棵行为树.注意点如下: 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开始递增:对于树中的子树,从左到右,可以对其子节点标记索引. 那么,这里的整棵树…
BehaviorDesigner是Unity上的一款行为树插件,不过这个插件是用C#编写的,编写出来的行为树也是依赖于C#的,不利于热更,所以有必要写一个lua版本的. 首先下载BehaviorDesigner这个插件,其中部分源码编译在Behavior Designer\Runtime\BehaviorDesignerRuntime.dll中,可以使用.NET Reflector这个工具进行反编译,然后将反编译后的类文件保存,然后用VS打开,就可以方便地查看源码啦.这个插件是自带pdf文档的,…