Files
Cielonos/docs/AI_Behavior_Boss_铁骑士.md
SoulliesOfficial f26f9fd374 爆更
2026-03-20 12:07:44 -04:00

9.9 KiB
Raw Blame History

title, description
title description
Boss行为树设计【铁骑士 - 埃癸斯】 结合“专家级博弈”与“铁骑士架构”,设计的一套基于意图广播、条件打断与攻防转换的高阶 Boss Behavior Designer 方案。

Boss 级敌人行为树架构设计:【铁骑士 - 埃癸斯】(Behavior Tree Architect)

本方案基于项目中【专家级AI设计理念】(见招拆招、信息广播) 与【铁骑士宏观架构】(弹反追击、重装蓄力打断、二阶段变阵) 综合设计。核心在于利用条件打断Conditional Aborts优先响应玩家的强行为输入,以实现动态的攻防博弈。

1. 黑板变量清单 (Blackboard SharedVariables)

为了支撑复杂的博弈逻辑与阶段变化,需创建以下变量:

  • [SharedTransform] TargetPlayer - 追踪的玩家目标。
  • [SharedFloat] HP_Percentage - 当前生命值百分比,用于二阶段判定。
  • [SharedBool] IsPhase2 - 是否已进入二阶段 (默认 False)。
  • [SharedBool] IsWeaknessState - 是否处于“极度虚弱/破防”状态 (默认 False)。
  • [SharedEnum] IncomingThreatType - 接收到的玩家意图类型 (枚举:None, HighFreqLight, HeavyCharge, SwitchTech)。由事件总线或感知触发器动态赋值。
  • [SharedFloat] ActionCooldown - 常规攻击连招间的冷却期。
  • [SharedFloat] LastActionTime - 上次执行攻击的时间。

2. 行为树主干逻辑 (Tree Structure - Indented List)

整棵树分为极高优先级的状态管理,高优先级的见招拆招反应,中优先级的主动进攻,以及低优先级的接敌步伐

  • [Selector] (根节点遍历)

    • [Behavior Tree Reference] 死亡与全局硬直 (Death & Global Stagger Subtree)

      • 原理: 最外层封装处理死亡,以及处理(如蓄力阶段被玩家重攻击成功打断后)造成的强制大硬直。
    • [Sequence] 虚弱惩罚状态 (Weakness Punishment) (Abort Type: Lower Priority)

      • 原理: 当 AI 发动“无情追击”被玩家完美闪避后,由外部系统或动画事件将 IsWeaknessState 设为 True打断正在进行的其它动作强制进入虚弱。这段时间 AI 失去霸体。
      • [Conditional] Check IsWeaknessState == True
      • [Action] Play Weakness/Overheat Animation (播放核心过载/喘息动画,持续数秒,且失去超级护甲)
      • [Action] Set IsWeaknessState = False
    • [Sequence] 二阶段变阵 (Phase 2 Transition) (Abort Type: Lower Priority)

      • 原理: 血量过半后强制打断常规逻辑,播放转阶段动画,解锁红眼/爆气状态。
      • [Conditional] Check HP_Percentage < 50
      • [Conditional] Check IsPhase2 == False
      • [Action] Play Phase Transition Roar (霸体怒吼,可能震退玩家)
      • [Action] Set IsPhase2 = True
    • [Selector] 见招拆招博弈分支 (Reaction & Counter Branch) (Abort Type: Lower Priority)

      • 原理: 持续监听当前的 IncomingThreatType。只要不为 None,立刻打断主动进攻和追击,进入特定的反制逻辑。

      • [Sequence] 应对:玩家连续轻攻击 (高频刮痧)

        • [Conditional] ThreatType == HighFreqLight
        • [Action] Execute Parry Stance (光耀大盾防反架势)
        • [Selector] (判定防反结果)
          • [Sequence] (玩家砍在了盾上触发弹刀)
            • [Conditional] IsParryTriggered == True
            • [Action] Execute Relentless Pursuit (发动迅猛的无情追击突刺。如果此招未命中,动画事件会设置 IsWeaknessState = True)
          • [Sequence] (玩家及时停手)
            • [Wait] 1.5s (举盾僵持)
            • [Action] Parry Recovery (放下盾牌,露出短暂破绽)
        • [Action] Clear ThreatType (重置为 None)
      • [Sequence] 应对:玩家频繁切换武器/高频位移 (Switch-Tech 滥用)

        • [Conditional] ThreatType == SwitchTech
        • [Action] Area Denial Attack (举剑猛砸地面,引爆周围立场压缩玩家走位空间)
        • [Action] Clear ThreatType (重置为 None)
    • [Sequence] 常规主动进攻分支 (Active Combat Branch) (Abort Type: Lower Priority)

      • 原理: 在冷却就绪时,根据距离和当前阶段挑选主动连段。
      • [Conditional] Is Action Cooldown Ready
      • [Random Selector]
        • [Sequence] 强力蓄力重击 (毁灭性打击)
          • [Action] Heavy Charge Windup (漫长的前摇准备。若此时被玩家重攻击击中,底层的感知会被触发,跳至硬直 Subtree)
          • [Action] Release Heavy Attack (释出高伤一击)
        • [Sequence] 常规连段 A (近战压迫)
          • [Conditional] Check Distance < 3
          • [Action] Execute Combo (盾击 -> 挥砍)
          • [Conditional] Check IsPhase2 == True (如果是二阶段,强制追加高阶派生!)
          • [Action] Execute Follow-up (重下劈)
        • [Sequence] 常规连段 B (中距离突进)
          • [Conditional] Check Distance < 6
          • [Action] Execute Combo (滑步突刺 -> 横扫)
      • [Action] Update LastActionTime
    • [Sequence] 压迫步伐 (Approaching Strafe) (Abort Type: Both)

      • 原理: 当无法攻击时,采用缓慢、沉稳的压迫性步伐朝玩家移动,而不是奔跑。由于是 Both随时可以被战斗行为或外界信号打断。
      • [Conditional] Check Distance > 2.5
      • [Action] Heavy Strafe Towards Target (持盾压迫寻路)
    • [Action] Idle/Guard (默认待机防守)


3. 可视化图表生成 (Mermaid Visualization)

graph TD
    Root([Selector]) --> GlobalSub[[Death / Stagger Subtree]]
    Root --> WeaknessSeq
    Root --> Phase2Seq
    Root --> ReactionBranch
    Root --> ActiveCombat
    Root --> ApproachSeq
    Root --> IdleBlock[Idle Guard]

    %% 虚弱分支
    WeaknessSeq([Sequence<br>Abort: Lower]) --> CondWeak{Is Weakness?}
    WeaknessSeq --> ActWeak[播放过载虚弱动画<br>失去超级护甲]
    WeaknessSeq --> ResetWeak[Reset Weakness]

    %% 转阶段
    Phase2Seq([Sequence<br>Abort: Lower]) --> CondHP{HP < 50% & Not Phase2?}
    Phase2Seq --> ActPhase2[爆气怒吼]
    Phase2Seq --> SetPhase2[Set Phase2=True]

    %% 见招拆招反应
    ReactionBranch([Selector<br>应对玩家操作<br>Abort: Lower]) --> ReactLight
    ReactionBranch --> ReactSwitch

    ReactLight([Sequence: 应对连击]) --> CondLight{Threat: 连续轻击}
    ReactLight --> ActParry[举起大盾防反]
    ActParry --> SelParry([Selector: 判定结果])
    SelParry --> HitShield([Seq: 弹刀触发]) --> ActPursuit[无情追击突刺<br>落空则致虚弱]
    SelParry --> WaitShield([Seq: 玩家停手]) --> ActVulnerable[放下盾牌产生破绽]

    ReactSwitch([Sequence: 应对切武/位移]) --> CondSwitch{Threat: 频繁切换/高频位移}
    ReactSwitch --> ActArea[释放场地引爆技<br>压缩走位]

    %% 主动进攻
    ActiveCombat([Sequence<br>主动进攻<br>Abort: Lower]) --> CondCD{冷却就绪?}
    ActiveCombat --> RandCombo([Random Selector])
    RandCombo --> HeavyCharge[蓄力重攻击<br>可被玩家重攻击打断]
    RandCombo --> ComboA([Seq: 连招A])
    RandCombo --> ComboB([Seq: 连招B])
    
    ComboA --> CondDistA{距离<3?} --> ActComboA[盾击挥砍] --> CondPhase2A{是二阶段?} --> FollowUp[强制多段派生: 霸体下劈]

    %% 压迫步伐
    ApproachSeq([Sequence<br>压迫寻路<br>Abort: Both]) --> CondDist{距离>2.5}
    ApproachSeq --> ActStrafe[沉稳举盾逼近]

    style ReactionBranch fill:#bf3f3f,stroke:#fff,color:#fff
    style ActWeak fill:#3d59ab,stroke:#fff,color:#fff
    style ActiveCombat fill:#cf8534,stroke:#fff,color:#fff
    style ApproachSeq fill:#4a8247,stroke:#fff,color:#fff
    style GlobalSub fill:#1c1c1c,stroke:#f00,color:#fff,stroke-width:2px

4. 自定义 Task 节点需求卡 (Custom Task Specs)

为支撑这种高度敏感的 AI 博弈系统,我们需要程序组开发以下 Behavior Designer 交互节点。

📌 节点1ListenIncomingThreat (条件类 Conditional)

  • 节点名称: ListenIncomingThreat
  • 输入参数 (Exposed):
    • SharedEnum TargetThreatToCheck (你想截获哪一种 Threat比如 HighFreqLightAny)
    • SharedEnum GlobalThreatVariable (黑板中用于存储当前 Threat 的变量)
  • 内部逻辑描述:
    • 通过 OnUpdate() 监控 GlobalThreatVariable
    • 如果匹配 TargetThreatToCheck,返回 TaskStatus.Success。打断低优先级节点。这使得 AI 能够瞬间响应玩家的操作。

📌 节点2ExecuteParryAndCounter (复合动作类 Action / Sequence)

  • 节点名称: ExecuteParryAndCounter
  • 内部逻辑描述:
    • 前摇期: 触发举盾动画,并在 Boss 身上启用特定的 ParryHitbox
    • 监听期:
      • 如果玩家的攻击(带有 LightAttack 标签)撞在 ParryHitbox 上,立刻触发玩家大硬直弹刀,并在节点内部立刻播放“无情追击 (Relentless Pursuit)”动画。
      • 如果追击动画的终伤没打中玩家(由外部无敌帧检测/闪避检测判定),调用方法强行把黑板的 IsWeaknessState 设为 True
    • 超时期: 若举盾超过指定时间,未受到攻击,则播放疲惫放下盾牌的动画。
    • 返回值: 整个逻辑播放完毕或被迫中断才返回 TaskStatus.SuccessFailure

📌 节点3HeavyChargeWindup (可中断状态动作类 Action)

  • 节点名称: HeavyChargeWindup
  • 内部逻辑描述:
    • 开场时赋给自身 SuperArmor (如果它没有常驻霸体)。
    • 开始漫长蓄力(如 2 秒)。
    • 核心机制:监听玩家的 HeavyAttack 伤害事件。如果蓄力期间挨到玩家的 HeavyAttack 判定,主动中断自身蓄力并分发强硬直事件(触发 Death & Global Stagger Subtree)。
    • 若蓄力圆满完成,返回 TaskStatus.Success 以便下一级节点释放“毁灭性打击”。