介绍
行为树是图形逻辑语言,作者可以使用行为树建立单位的思考逻辑,通过行为树使单位拥有智能。
行为树的执行是从根节点出发,从左至右依次遍历每个子节点及其子树,根据每个节点的规则计算并返回其执行结果,并按照组合节点设定好的规则选择跳过哪些子节点,执行哪些子节点。
行为树在执行过程中可能需要存储一些信息,因此行为树提供了Board,行为树通过特殊的节点对Board进行读/写,以此来进行一些状态的存储和恢复。
参数和表达式
大部分行为树节点都需要填写一些参数,这些参数有类型的要求,如必须填数字,字符串或列表。
在节点信息栏可以看到相关的提示
表达式
需要特别说明的是表达式,这是行为树允许的一类特殊的参数,允许用户使用行为树特别定义的语法来访问单位的相关属性。
表达式由项构成,项与项之间使用运算符连接成新的表达式。如1是项,1+1是用+运算符连接的两个项,1和1+1都是合法的表达式。
行为树
常见的树模式
IF-ELSE模式
先执行A,A返回成功时继续执行B,否则跳回Selector节点执行C
A, B和C节点都可以是子树,需要注意B子树和C子树需要保证返回成功
l IF-ELSEIF-ELSE模式
Sequence子树是可以无限扩展的
实例
持续攻击最近目标模式
本行为树操作下的单位会一直选择追击距离自己最近的单位,可以被两个敌方单位放风筝
选取目标,持续追击,脱战模式
状态转移系统
左侧的selector进行在任意状态下的强制状态跳转,右侧的selector判断当前所处的状态,并执行对应的行为。
在右侧selector的子树中,你也可以添加设置STATE状态的节点,这样可以在执行状态中进行状态转移。
行为树与触发器参数关联
根节点
重要参数:
parameter_friendly_names:命令单位根据规则{#0}学习技能
在编辑器中的运行对应AI指令时会出现上述描述
{#0}表示此处需要在使用时填入参数,若有多个参数,填写为{#0} {#1}依次
例如:命令单位沿路径点{#0}移动,巡逻类型为{#1}, 防守类型为{#2}, 警戒半径为{#3}, 脱战半径为{#4}, {#5}脱战回血
friendly_name 出现在编辑器的指令列表中所用的名字
alias 行为树文件本身的名称,可使用默认值
parameter_types 参数类型列表,多个参数时以英文逗号分开,依次表示{#0},{#1}…所需要填写的参数类型
par_namen_list 无效,不要使用
parameter_names 参数名称列表,多个参数时用英文逗号分隔,对应{#0},{#1}…参数在行为树中的名称,用于在行为树对上述参数内容进行引用
实例
如上述截图中的使用情况如下:
使用指令触发器
指令名称列表
此处以friendly_name 显示
具体指令描述
此处以parameter_friendly_names显示
参数类型为parameter_types
parameter_names可被使用于行为树其他节点
其他
每种单位默认没有行为,在不想使用触发器添加AI的时候,可以设置默认的行为,使单位拥有默认防守警戒行为。
使用时需要注意,这里的行为会添加到所有该名称的单位个体身上,而不是单位个体。