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

    输出如下:

  • 相关阅读:
    关于MySQL 最后一部安装阶段无法响应的问题
    为PHP 启用Mysql 的dll
    webcast终于改版了
    有意思的oracle转义字符
    Telnet协议详解及使用C# 用Socket 编程来实现Telnet协议
    我被百度悲剧了
    阻止 http://3b3.org/c.js恶意SQL注入
    驱动研究日记-链表+后备链表
    C# 执行汇编类
    Tuning and Slimming JBossAS
  • 原文地址:https://www.cnblogs.com/lyh916/p/9575672.html
Copyright © 2011-2022 走看看