参考资料
好用的行为树插件
行为树的基本概念
- 行为树采用策略型思考方式编写。
- 行为树的本质是树状节点,是一种树形的父子节点之间的逻辑结构,通过扩展节点的功能来实现复杂的行为逻辑。
- 行为树可以使用节点搭建一个庞大的AI模型。这些节点就像一个个的积木块,用这些节点搭建完整AI的过程就像是搭积木。
行为树中的节点
表现节点 Behavior Node
整颗行为树中,只有条件节点和行为节点能成为叶子节点,只有这两种是项目中要特别定制的节点。
条件节点 Condition Node
- 条件满足返回true,不满足返回false
- 常用的条件节点有:大于,小于,等于,与或非等等
- 应用场景有:判断血量,判断距离,判断状态,判断时间间隔等等
行为节点 Action Node
- Action 一般都是最后的叶子节点,对应了游戏中的某个具体行为,在完成具体的一次行为后根据计算或者配置返回值。
- 行为节点都是根据项目的需要从基础行为节点扩展而来,行为节点是最更富的节点库,大部分时间程序员都是在修改和扩容行为节点,
- 应用场景有:行走到目标点,追击目标,使用物品,撤退,攻击目标,防御,释放技能等等。
决策节点 Decider Node
复合节点和修饰节点用于控制行为树中的决策走向,一般不需要根据项目定制。
复合节点 Composite Node
- 复合节点可以有一个或者多个子节点。复合节点决定了子节点的执行顺序。
- 选择节点和顺序节点可以进一步提供非线性迭代的加权随机变种。
- 并发节点提供了并发性,可以利用线程或协程提供并发操作,性能高。一般在并发节点下面并行挂载多个Action子树或多个条件节点,以提供实时性。
选择节点 Selector
- 按顺序迭代执行子节点,遇到第一个返回true的子节点,停止迭代,返回true。
- 如果所有子节点都返回false,则返回false。
- 变种:
随机权重选择节点
(Weight Random Selector),每次执行不同的起点为每次执行不同的 first true 子节点提供了可能性。
顺序节点 Sequence
- 按顺序迭代执行子节点,遇到一个返回false的子节点,停止迭代,返回false。
- 如果所有子节点都返回true,则返回true。
- 变种:
随机权重顺序节点
(Weight Random Sequence),可以提供不同的随机迭代顺序,避免AI总是出现可预期的结果,让结果更具随机性。
并行选择节点 Parallel Selector
- 并行执行所有子节点,执行完所有子节点后,如果有一个子节点返回true,则返回true。
- 如果所有子节点都返回false,则返回false。
并行顺序节点 Parallel Sequence
- 并行执行所有子节点,执行完所有子节点后,如果有一个子节点返回false,则返回false。
- 如果所有子节点都返回true,则返回true。
并行混合节点 Parallel Hybird
- 并行执行所有子节点,执行完所有子节点后,按指定数量的节点返回true或false后再决定返回结果。
修饰节点 Decorator Node
- 修饰节点只能有一个子节点。在其子节点执行后,对返回的结果进行修饰后返回给它的父节点。
- 修饰节点都可以自定义出来,其功能五花八门
反向修饰 Not
- 将子节点的结果取反后返回给父节点。
直到失败修饰 Failure Until
- 在子节点到达指定的次数前一直向父级返回false,子节点到达指定的次数后,返回true
总是失败修饰 Fail
- 总是返回false
计数修饰 Counter
- 只运行子节点n次,超过n次后不再运行。
时间修饰 Time
- 在指定的时间内运行子节点后都返回true,超过时间范围总返回false。
不做任何事 Nothing
- 什么都不干,占个位置。
日志 Log
- 打印日志,告知开发者当前节点的位置和相关信息。
优点
- 单个节点易扩展。
- 通过一些简单的操作就能制作出能够达到人类预期的足够复杂的 AI 行为。