AI行为树叶节点:攻击目标 (JobNode_AttackTarget)
功能说明
JobNode_AttackTarget 是一个 AI 行为树的叶节点,它指示执行该行为树的实体 (SelfEntity) 寻找到其视野范围内最近的一个敌对目标,并对其发起一次攻击。如果未能找到有效的敌对目标,或者在攻击前目标失效(例如已死亡),则该节点会返回失败。此节点通常用于定义需要主动攻击敌人的行为逻辑链中。
该节点无需任何自定义参数,其行为完全基于 SelfEntity 的当前状态、其与环境中其他实体的关系以及攻击能力。
可用参数
无需配置参数。JobNode_AttackTarget 节点无需任何额外配置即可工作。它的逻辑是自动寻找并攻击 SelfEntity (当前执行行为树的实体)最近的敌对目标。
行为树节点状态 (Status) 返回值
JobNode_AttackTarget 节点执行完毕后,会返回以下状态:
- 成功 (
Success):- 成功在当前区域找到一个有效的敌对实体。
SelfEntity成功地对该敌对实体发起了一次攻击尝试。
- 失败 (
Failure):- 在当前维度中未找到任何有效的敌对实体。
- 找到了敌对实体,但在尝试攻击前该实体变得无效(例如,它已死亡或离开区域)。
SelfEntity由于其他原因无法发起攻击(例如,攻击冷却中、没有武器或攻击能力等)。
示例
以下是一个 BehaviorTreeDef 的示例,展示了 JobNode_AttackTarget 如何在一个基本的怪物行为中被使用:
<Define>
<BehaviorTreeDef>
<defName>BasicMonsterBehavior</defName>
<label>基础怪物行为</label>
<description>怪物寻路并攻击最近的敌人,或者徘徊和空闲。</description>
<!-- 根节点下的行为逻辑 -->
<!-- 条件分支:如果怪物有武器,则尝试攻击 -->
<Node className="ThinkNode_Conditional" value="HasWeapon()">
<!-- 序列节点:先移动到攻击范围,再执行攻击 -->
<childTree>
<li>
<className>ThinkNode_Sequence</className>
<childTree>
<li>
<!-- 移动到攻击范围,如果距离太远就移动,否则直接成功 -->
<className>JobNode_MoveToAttackRange</className>
</li>
<li>
<!-- 攻击最近的敌对目标 -->
<className>JobNode_AttackTarget</className>
</li>
</childTree>
</li>
</childTree>
</Node>
<!-- 默认行为:如果上述攻击条件不满足,则徘徊和空闲 -->
<Node className="ThinkNode_Sequence">
<childTree>
<li>
<!-- 随机徘徊一段时间 -->
<className>JobNode_Wander</className>
</li>
<li>
<!-- 空闲一段时间 -->
<className>JobNode_Idle</className>
</li>
</childTree>
</Node>
</BehaviorTreeDef>
</Define>
在上述示例中,JobNode_AttackTarget 被放置在一个序列节点中。这意味着它只会在 JobNode_MoveToAttackRange 成功执行(即实体已到达攻击范围或无需移动)之后才会尝试执行。整个攻击序列又被包含在一个条件节点 ThinkNode_Conditional 中,确保只有当怪物拥有武器时才会执行攻击行为。