zoukankan      html  css  js  c++  java
  • [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

    输出如下:

  • 相关阅读:
    poi 导出文件
    获取哪一年 周一的所有日期
    线程池配置
    mybatis基于唯一索引插入或更新
    mongoTemplate关联查询
    cas认证机制
    SpringBoot服务
    HashMap的底层实现
    maven仓库提示“Downloading: http://repo.maven.apache.org/maven2/”
    Tomcat安装SSL证书
  • 原文地址:https://www.cnblogs.com/lyh916/p/9575672.html
Copyright © 2011-2022 走看看