[Unity插件]Lua行为树(十):通用行为和通用条件节点
在行为树中,需要扩展的主要是行为节点和条件节点。一般来说,每当要创建一个节点时,就要新建一个节点文件。而对于一些简单的行为节点和条件节点,为了去掉新建文件的过程,可以写一个通用版本的行为节点和条件节点,以传入方法的方式来避免新建文件。
BTActionUniversal.lua
- --[[
- 通用Action节点
- --]]
- BTActionUniversal = BTAction:New();
- local this = BTActionUniversal;
- this.name = "BTActionUniversal";
- function this:New(enterFunc, executeFunc, exitFunc)
- local o = {};
- setmetatable(o, self);
- self.__index = self;
- o.enterFunc = enterFunc;
- o.executeFunc = executeFunc;
- o.exitFunc = exitFunc;
- return o;
- end
- function this:Enter()
- if (self.enterFunc) then
- self.enterFunc();
- end
- end
- function this:Execute()
- if (self.executeFunc) then
- return self.executeFunc();
- else
- return BTTaskStatus.Failure;
- end
- end
- function this:Exit()
- if (self.exitFunc) then
- self.exitFunc();
- end
- end
BTConditionalUniversal.lua
- --[[
- 通用Conditional节点
- --]]
- BTConditionalUniversal = BTConditional:New();
- local this = BTConditionalUniversal;
- this.name = "BTConditionalUniversal";
- function this:New(checkFunc)
- local o = {};
- setmetatable(o, self);
- self.__index = self;
- o.checkFunc = checkFunc;
- return o;
- end
- function this:Check()
- return self.checkFunc();
- end
TestBehaviorTree.lua
- TestBehaviorTree = BTBehaviorTree:New();
- local this = TestBehaviorTree;
- this.name = "TestBehaviorTree";
- function this:New()
- local o = {};
- setmetatable(o, self);
- self.__index = self;
- o:Init();
- return o;
- end
- function this:Init()
- local sequence = BTSequence:New();
- local conditional = self:GetBTConditionalUniversal();
- local action = self:GetBTActionUniversal();
- local log = BTLog:New("This is log!!!");
- log.name = "log";
- self:SetStartTask(sequence);
- sequence:AddChild(conditional);
- sequence:AddChild(action);
- sequence:AddChild(log);
- end
- function this:GetBTConditionalUniversal()
- local a = function ()
- return ( > );
- end
- local universal = BTConditionalUniversal:New(a);
- return universal;
- end
- function this:GetBTActionUniversal()
- local count = ;
- local a = function () print(""); end
- local b = function ()
- if (count < ) then
- count = count + ;
- print("");
- return BTTaskStatus.Running;
- else
- return BTTaskStatus.Success;
- end
- end
- local c = function () print(""); end
- local universal = BTActionUniversal:New(a, b, c);
- return universal;
- end
打印如下:
[Unity插件]Lua行为树(十):通用行为和通用条件节点的更多相关文章
- [Unity插件]Lua行为树(十二):行为树管理
之前运行的行为树,都是一颗总树,那么实际上会有很多的总树,因此需要对行为树进行管理. BTBehaviorManager.lua BTBehaviorManager = {}; local this ...
- [Unity插件]Lua行为树(四):条件节点和行为节点
条件节点和行为节点,这两种节点本身的设计比较简单,项目中编写行为树节点一般就是扩展这两种节点,而Decorator和Composite节点只需要使用内置的就足够了. 它们的继承关系如下: Condit ...
- [Unity插件]Lua行为树(九):条件节点调整
先看一下之前的条件节点是怎么设计的: BTConditional.lua BTConditional = BTTask:New(); local this = BTConditional; this. ...
- [Unity插件]Lua行为树(一):BehaviorDesigner源码分析
BehaviorDesigner是Unity上的一款行为树插件,不过这个插件是用C#编写的,编写出来的行为树也是依赖于C#的,不利于热更,所以有必要写一个lua版本的. 首先下载BehaviorDes ...
- [Unity插件]Lua行为树(七):行为树嵌套
在上一篇的基础上,可以测试下行为树的嵌套,所谓的行为树嵌套,就是在一棵行为树下的某一个分支,接入另一棵行为树. 以下面这棵行为树为例: TestBehaviorTree2.lua TestBehavi ...
- [Unity插件]Lua行为树(六):打印树结构
经过前面的文章,已经把行为树中的四种基本类型节点介绍了下.接下来可以整理一下,打印一下整棵行为树.注意点如下: 1.可以把BTBehaviorTree也当作一种节点,这样就可以方便地进行行为树嵌套了 ...
- [Unity插件]Lua行为树(二):树结构
参考链接:https://blog.csdn.net/u012740992/article/details/79366251 在行为树中,有四种最基本的节点,其继承结构如下: Action->T ...
- [Unity插件]Lua行为树(三):组合节点Sequence
Sequence的继承关系如下: Sequence->Composite->ParentTask->Task 上一篇已经实现了简单版本的ParentTask和Task(基于Behav ...
- [Unity插件]Lua行为树(十一):组合节点Parallel
Parallel节点类似Sequence节点,不同在于Parallel会每帧执行所有的节点.当所有节点返回成功时返回成功,当其中一个节点返回失败时,返回失败并且结束所有的子节点运行. 例如说,给Seq ...
随机推荐
- 【python】序列化和反序列化
序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象.在python的标准库中,专门提供了json库与pickle库 ...
- Thinkphp 视图模型
1.创建视图模型 2.定义视图模型 class BlogViewModel extends ViewModel { public $viewFields = array( 'Blog'=>arr ...
- vi命令【方向键】变字母键的解决方法
vi命令[方向键]变字母键的解决方法 最近在SSH下玩Debian发现了一个有趣的现象,就是在一些个别版本的Debian镜像下,使用vi命令时会出现键盘输出出错的现象,使用方向键时会变成C,D等字 ...
- js copy数组 对象
js copy数组 slice concat 浅拷贝 copy 对象 Object.assign({},obj); es6 ie要用babel转 暴力copy 用JSON.parse(JSON. ...
- 阿里云kubernetes遭入侵pubg进程占用cpu资源100%解决方法
发现服务器CPU占用100%,通过top命令发现pubg -c config.json -t 2占用CPU资源,kill进程会自动启动.黑客入侵方式是kubernetes创建pod. Name: ku ...
- Java学习——多线程例子:银行
package cys; public class Example9_3 { public static void main(String[] args) { // TODO Auto-generat ...
- jquery插件的几种写法
/** * Created by peng on 2016/12/8. */jQuery.extend({ min: function(a, b) { return a < b ? a : b; ...
- 自定义鼠标右键(层叠式菜单:cascading menu)
Author:KillerLegend From:http://www.cnblogs.com/killerlegend/p/3575391.html Date:Tuesday, February 1 ...
- jQuery版本问题,及事件源
jQuery版本的分界线是2.0 2.0之前很多方法支持ie低版本,2.0之后就不支持了 工具:index() 指定元素的索引 (有参数) 不传参的情况下,父级元素下同级元素的排名,传参:指定元素的 ...
- [UE4]关卡蓝图