Skip to content

xiyoo0812/luabt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lua 行为树

依赖

支持节点类型

  • Failed:总是返回FAIL
  • Invert:反转执行结果
  • Succeed: 总是返回成功
  • Random:随机选择子节点执行
  • Repeat:重复执行子节点,需要注意的是每次重复会跳帧
  • Select:顺序执行,遇到成功返回
  • Sequence:顺序执行,遇到失败返回
  • WSelect:顺序执行,遇到成功返回,子节点按权重先排序
  • WSequence:顺序执行,遇到失败返回,子节点按权重先排序
  • Condition:条件节点,根据条件执行子节点
  • Parallel:并行节点,根据设置的成功和失败条件返回

实现原理

  • 节点状态
luabt = {
    -- Node Status
    WAITING     = 0,    --等待,中间状态,展开子节点返回
    SUCCESS     = 1,    --成功
    FAIL        = 2,    --失败
    RUNNING     = 3,    --运行
}
  • 每次tick从root节点一次展开执行,遇到FAIL或者全部SUCCESS则reset
  • 遇到RUNNING,本次tick结束,下一次从RUNNING继续执行
  • 支持中断机制,中断达成后,回到中断节点继续执行

扩展节点

  • 修饰节点Succeed, Failed, Invert:子节点从框架节点继承,同时实现on_execute接口
function SucceedNode:on_execute(tree)
    return SUCCESS
end
  • 条件节点Condition:子节点从框架节点继承,同时实现on_check接口
function ConditionNode:on_check(tree)
    return true
end
  • 循环节点Repeat:子节点从框架节点继承,同时实现on_check接口控制循环
function RepeatNode:on_check(tree)
    return true
end
  • 普通节点Node:子节点从框架Node节点继承,同时实现run接口
function Flee:run(tree)
    tree.robot.hp = tree.robot.hp + 2
    print(tree.robot.hp, "Flee.....")
    return SUCCESS
end
  • 中断节点:任意节点可以成为中断节点,只需要实现on_interrupt接口
function BtNode:on_interrupt(tree)
    return true
end
  • 组合节点:直接使用系统提供的组合节点

Example

备注: 需要先下载luaoop

lua example/example.lua

Releases

No releases published

Packages

No packages published

Languages