Skip to content

行为树

一、使用流程

*注 使用行为树插件需要地图中含有lua工程

1.点击菜单中的LUA,下方的编辑器插件管理

2.点击添加插件,选择AI行为树

3.点击功能栏中的更多点击行为树即可打开

4.点击后即可打开行为树编辑插件

二、行为树基础操作

1.菜单中点击新建行为树,即可新建新的一份行为树逻辑

2.新建后,选中画布中的节点,可通过右键菜单或回车键为当前节点新增子节点

3.节点新建后,可通过修改节点名称切换对应的行为节点

4.可通过拖动调整节点顺序

5.保存行为树后,可选择生物, 在生物的行为树路径属性中选择编辑好的行为树

三、基础结构

基础构成

行为树的由以下几种类型的节点组成:

  1. 行为节点

表示具体的行为或动作,例如“走向目标”或“攻击敌人”。

  1. 条件节点

检查某些条件是否满足,如果满足,则返回“成功”;如果不满足,则返回“失4败”。

  1. 复合节点(Composite Nodes)

用于控制子节点执行顺序和逻辑的特殊节点。

  1. 装饰节点(Decorator Nodes)

对其他节点进行修饰或更改行为,常用来实现条件反转、重复执行等操作。

运行流程

行为树通过遍历节点来执行相应的操作。

具体流程如下:

节点执行:根节点开始执行,按层次结构逐级向下执行子节点。

节点结果:每个节点会返回一个结果,通常是“成功”、“失败"或"正在进行”(Running)。根节点根据子节点的结果来决定自己的状态。

状态更新:一旦某个节点完成任务或判断条件发生变化,行为树会根据当前状态重新评估,并决定下一步执行哪个行为。

四、基础节点介绍

1.复合节点

1)Selector 选择执行

按顺序尝试其子节点,直到一个成功。如果一个子节点失败,它会尝试下一个子节点。

2)Sequence 顺序执行

按顺序尝试其子节点,直到一个成功。如果一个子节点失败,它会尝试下一个子节点。

3)Paraller 并行执行

4)Case 分支选择

5)IfElse 条件执行

2.条件节点

1)Cmp 数值比较

2)FindEnemy 查找敌人

3)Includes 是否在数组中

4)IsStatus 节点状态查询

5)IsNull 变量是否存在

3.装饰节点

1)AlwaysFailure 始终失败

2)AlwaysRunning 始终运行中

3)AlwaysSuccess 始终成功

4)Invert 反转结果

5)Listen 侦听事件

6)Once 只执行一次

7)Repeat 循环执行

8)RetryUntilFailure 直到失败

9)RetryUntilSuccess 直到成功

4.行为节点

1)Attack

2)GetHp

3)Idle

4)Jump

5)Lift

6)MoveToPos

7)MoveToTarget

8)Rush

9)Wait

10)WaitForCount

11)WaitForEvent

12)Now

13)Random

14)Push

15)Log

16)JustSucess

17)ForEach

18)Filter

19)Concat

20)Clear

21)GetField

五、自定义节点制作

1.在lua的behavior_tree/custom_node中新增一个lua文件

lua
--载入行为树基础模块
local bret = require 'behavior.behavior_ret'

--定义节点信息
local M = {
    name = 'ExampleAction', --名称
    type = 'Action',   --类型:Action,Composite,Condition,Decorator
    desc = '范例描述', --节点的描述
    args = {    --节点可使用的参数信息
        {
            name = "value",
            type = "string",--参数类型支持string,int,json
            desc = "公式"
        },
    },
    input = { "[{数组}]" },--支持输入的变量
    output = { "{变量}" },--支持输出的变量
    doc = [[
        + 只能有一个子节点,多个仅执行第一个
        + 每次执行子节点前会设置当前遍历到的变量
        + 当子节点返回失败时,退出遍历并返回失败状态
        + 其它情况返回成功/正在运行
    ]],
}

--执行逻辑,运行节点时,实际的信息,node为节点数据,env为环境数据
function M.run(node, env)
    local owner = env.owner
    --最终返回节点执行状态 success,running,fail
    return bret.SUCCESS
end

return M

2.在lua中behavior_tree/custom_node中的node_config中补充对应的节点加载语句

3.编辑好lua数据后,点击刷新节点,即可在行为树编辑中使用到该节点