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

    输出如下:

  • 相关阅读:
    u-boot下延时程序失效的bug调试
    tiny4412u-boot烧写及根文件系统制作(不进入终端问题)
    tiny4412学习笔记-将uboot、zImage、文件系统烧到emmc中 (转)
    Tiny4412 U-BOOT移植(转)
    为何ARM linux会引入Device Tree(转)
    嵌入式开发社区
    基于tiny4412的u-boot移植(二)(转)
    ARM Linux 3.x的设备树(Device Tree)(转)
    HTML基础-------HTML标签(1)
    HTML基础-------最初概念以及相关语法
  • 原文地址:https://www.cnblogs.com/lyh916/p/9575672.html
Copyright © 2011-2022 走看看