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 中,确保只有当怪物拥有武器时才会执行攻击行为。