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数据后,点击刷新节点,即可在行为树编辑中使用到该节点