[Unity插件]Lua行为树(四):条件节点和行为节点

条件节点和行为节点,这两种节点本身的设计比较简单,项目中编写行为树节点一般就是扩展这两种节点,而Decorator和Composite节点只需要使用内置的就足够了。

它们的继承关系如下:

Conditional->Task

Action->Task

代码如下:

BTAction.lua

 1 BTAction = BTTask:New();
 2
 3 local this = BTAction;
 4
 5 function this:New()
 6     local o = {};
 7     setmetatable(o, self);
 8     self.__index = self;
 9     return o;
10 end

BTConditional.lua

 1 BTConditional = BTTask:New();
 2
 3 local this = BTConditional;
 4
 5 function this:New()
 6     local o = {};
 7     setmetatable(o, self);
 8     self.__index = self;
 9     return o;
10 end

BTLog.lua

 1 --[[
 2 参考BehaviorDesigner-Action-Log
 3 --]]
 4 BTLog = BTAction:New();
 5
 6 local this = BTLog;
 7
 8 function this:New(text)
 9     local o = {};
10     setmetatable(o, self);
11     self.__index = self;
12     o.text = text;
13     return o;
14 end
15
16 function this:OnUpdate()
17     print(self.text);
18     return BTTaskStatus.Success;
19 end

BTIsNullOrEmpty.lua

 1 --[[
 2 参考BehaviorDesigner-Conditional-IsNullOrEmpty
 3 --]]
 4 BTIsNullOrEmpty = BTConditional:New();
 5
 6 local this = BTIsNullOrEmpty;
 7
 8 function this:New(text)
 9     local o = {};
10     setmetatable(o, self);
11     self.__index = self;
12     o.text = text;
13     return o;
14 end
15
16 function this:OnUpdate()
17     if (not self.text or self.text == "") then
18         return BTTaskStatus.Success;
19     else
20         return BTTaskStatus.Failure;
21     end
22 end

TestBehaviorTree.lua

 1 TestBehaviorTree = BTBehaviorTree:New();
 2
 3 local this = TestBehaviorTree;
 4
 5 function this:New()
 6     local o = {};
 7     setmetatable(o, self);
 8     self.__index = self;
 9     this:Init();
10     return o;
11 end
12
13 function this:Init()
14     local sequence = BTSequence:New();
15     local isNullOrEmpty = BTIsNullOrEmpty:New("");
16     local log = BTLog:New("This is a empty string");
17     sequence:AddChild(isNullOrEmpty);
18     sequence:AddChild(log);
19     this:PushTask(sequence);
20 end

输出如下:

原文地址:https://www.cnblogs.com/lyh916/p/9575672.html

时间: 2024-08-28 10:12:37

[Unity插件]Lua行为树(四):条件节点和行为节点的相关文章

[Unity插件]Lua行为树(十):通用行为和通用条件节点

在行为树中,需要扩展的主要是行为节点和条件节点.一般来说,每当要创建一个节点时,就要新建一个节点文件.而对于一些简单的行为节点和条件节点,为了去掉新建文件的过程,可以写一个通用版本的行为节点和条件节点,以传入方法的方式来避免新建文件. BTActionUniversal.lua 1 --[[ 2 通用Action节点 3 --]] 4 BTActionUniversal = BTAction:New(); 5 6 local this = BTActionUniversal; 7 this.na

[Unity插件]AI行为树使用总结

参考链接: https://blog.csdn.net/linxinfa/article/details/72937709 https://blog.csdn.net/wanghaodiablo/article/details/52587364 https://blog.csdn.net/q414620221/article/details/78596732 0.节点 一般情况下,只需要扩展Conditional和Action这两种节点即可,Decorator和Composite节点只需要使用内

Unity中的行为树插件:Behavior Designer

外国技术人员的插件:http://www.opsive.com/assets/BehaviorDesigner 目前公司内部比较推崇的行为树插件就是这个,虽然有其他几个同类的竞品. 说一句题外话,优秀的插件总是外国人开发的,并且可以将插件开发做成一个小工作室或者个人的主要收入来源,但没看到国人有类似的作品出现. 行为树的概念出现已经很多年了,总的来说,就是使用各种经典的控制节点+行为节点进行组合,从而实现复杂的AI.目前在游戏中一般复杂的AI都可以看到行为树的身影,简单的AI可以使用状态机来实现

lua行为树设计与实现

项目需要,之前行为树用的是behaviorDesigner,要改成纯lua的 我先做了一版用递归实现,代码可读性高但是中断机制实现起来比较复杂,而且创建自定义action重写方法时需要调用父类的方法, 如果忘了调用就会出现问题, 所以改成了用栈模拟递归. 用栈模拟递归好处在于效率高,并且容易控制,用非递归实现后自定义一个行为树节点,那么该节点不用知道父亲的方法,只要做好自己的事情就OK了 完整测试工程已上传到了github:https://github.com/MCxYY/LuaBT 行为树整体

我眼中的Linux设备树(四 中断)

四 中断 中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设备的中断源称之为中断控制器中对应中断的子中断.一般情况中断产生设备数量要多于中断控制器,多个中断产生设备的中断都由一个中断控制器处理,这种多对一的关系也很像一个树形结构,所以在设备树中,中断也被描述成树,叫中断树.以下表述的时候为了明确是在说中断树,在父节点和子节点前边我们都加上“中断”二字,是为

Linux设备树(四 中断)

四 中断 中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设备的中断源称之为中断控制器中对应中断的子中断.一般情况中断产生设备数量要多于中断控制器,多个中断产生设备的中断都由一个中断控制器处理,这种多对一的关系也很像一个树形结构,所以在设备树中,中断也被描述成树,叫中断树.以下表述的时候为了明确是在说中断树,在父节点和子节点前边我们都加上"中断"

【线段树四】HDU 2795 Billboard

BillboardTime Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9045    Accepted Submission(s): 4021 Problem Description At the entrance to the university, there is a huge rectangular billboard of siz

利用jstree插件轻松构建树应用

利用jstree插件轻松构建树应用 最近完成了项目中的一个树状应用,第一次接触了jstree这个插件,总的来说它的官方文档还是比较详细的,但是在使用过程中还是出现了一些问题,下面我就来谈谈这款插件的使用和心得. 首先项目需要构建一棵树,利用jstree插件我们先在页面上静态的把这棵树渲染出来,参照官方文档(http://www.jstree.com/),代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head&g

【学习中】Unity插件之NGUI 完整视频教程

课程 章节 内容 签到 Unity插件之NGUI 完整视频教程 第一章 NGUI基础控件和基础功能学习 1.NGUI介绍和插件的导入 6月29日 2.创建UIRoot 6月29日 3.学习Label控件,显示文字 6月29日 4.学习Sprite创建精灵,显示图片 5.学习Panel面板,控件容器 6.创建Button按钮,使用脚本监听按下 7.创建图集Atlas 8.切图SlicedSprite九宫切图 9.dynamicFont动态字体制作和显示 10.widget属性,pivot,dept