AI行为树叶节点:空闲 (JobNode_Idle)
功能说明
JobNode_Idle 是一个 AI 行为树的叶节点,它指示执行该行为树的实体 (SelfEntity) 进入一段时间的空闲状态。在此期间,实体不会执行任何特定的动作,而是保持“待命”状态,直到预设的空闲时间结束。此节点通常用于填充行为链中需要实体暂停或等待的间隙,例如在完成一个任务后等待下一个指示,或者单纯地在没有其他紧急任务时进行放松。
JobNode_Idle 节点可以通过一个可选的参数来指定空闲的持续时间(以游戏帧为单位)。如果未指定,它将使用基类默认的空闲时间。
可用参数
JobNode_Idle 节点允许通过 BehaviorTreeDef 中 Node 元素的 value 属性来配置其空闲持续时间。
| 参数名 | XML参数名 (value 属性) | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
TimeoutFrames | value | 整数 | 180 | 可选。指定实体将保持空闲状态的帧数。180帧大约对应3秒的游戏时间(假设60帧/秒)。如果未指定此参数,则默认使用基类设定的 180 帧。 |
行为树节点状态 (Status) 返回值
JobNode_Idle 节点执行完毕后,会返回以下状态:
- 运行中 (
Running):- 空闲时间尚未结束。实体将继续保持空闲状态,并在下一个行为树tick时再次执行此节点。
- 成功 (
Success):- 预设的空闲时间已全部耗尽。实体已完成空闲任务,可以继续执行行为树中的下一个节点。
示例
以下是一个 BehaviorTreeDef 的示例,展示了 JobNode_Idle 如何在一个怪物行为中被使用:
<Define>
<BehaviorTreeDef>
<defName>MonsterPatrolBehavior</defName>
<label>怪物巡逻行为</label>
<description>怪物在巡逻和空闲之间切换。</description>
<!-- 序列节点:先移动到巡逻点,然后空闲 -->
<Node className="ThinkNode_Sequence">
<childTree>
<li>
<!-- 移动到一个预定义的巡逻点 -->
<className>JobNode_MoveToPatrolPoint</className>
<!-- 假设此处 JobNode_MoveToPatrolPoint 也有自己的value或子节点配置 -->
</li>
<li>
<!-- 空闲150帧 (2.5秒) -->
<className>JobNode_Idle</className>
<value>150</value>
</li>
</childTree>
</Node>
<!-- 另外一个序列节点,展示不指定value的Idle -->
<Node className="ThinkNode_Sequence">
<childTree>
<li>
<!-- 执行某个任务 -->
<className>JobNode_PerformTask</className>
</li>
<li>
<!-- 空闲默认的180帧 (3秒) -->
<className>JobNode_Idle</className>
</li>
</childTree>
</Node>
</BehaviorTreeDef>
</Define>
在上述示例中:
- 第一个
JobNode_Idle通过value属性指定了 150 帧的空闲时间。 - 第二个
JobNode_Idle没有指定value属性,因此它将使用基类默认的 180 帧空闲时间。
复杂参数说明
value 属性 (空闲帧数)
- 说明:在
BehaviorTreeDef的Node元素中,JobNode_Idle节点的value属性用于直接指定空闲的帧数。它应该是一个可以被解析为整数的字符串。 - 用法:
<className>JobNode_Idle</className><value>300</value>:表示实体将空闲 300 帧(约 5 秒)。<className>JobNode_Idle</className>:表示实体将空闲默认的 180 帧(约 3 秒)。
- 注意事项:
value属性预期接收一个纯数字字符串。如果字符串无法解析为整数,JobNode_Idle将退回到使用默认的空闲帧数。