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

179 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Boss行为树设计【铁骑士 - 埃癸斯】
description: 结合“专家级博弈”与“铁骑士架构”,设计的一套基于意图广播、条件打断与攻防转换的高阶 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)
```mermaid
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 交互节点。
### 📌 节点1`ListenIncomingThreat` (条件类 Conditional)
- **节点名称**: `ListenIncomingThreat`
- **输入参数 (Exposed)**:
- `SharedEnum TargetThreatToCheck` (你想截获哪一种 Threat比如 `HighFreqLight``Any`)
- `SharedEnum GlobalThreatVariable` (黑板中用于存储当前 Threat 的变量)
- **内部逻辑描述**:
- 通过 `OnUpdate()` 监控 `GlobalThreatVariable`
- 如果匹配 `TargetThreatToCheck`,返回 `TaskStatus.Success`。打断低优先级节点。这使得 AI 能够瞬间响应玩家的操作。
### 📌 节点2`ExecuteParryAndCounter` (复合动作类 Action / Sequence)
- **节点名称**: `ExecuteParryAndCounter`
- **内部逻辑描述**:
- **前摇期**: 触发举盾动画,并在 Boss 身上启用特定的 `ParryHitbox`
- **监听期**:
- 如果玩家的攻击(带有 `LightAttack` 标签)撞在 `ParryHitbox` 上,立刻触发玩家大硬直弹刀,并在节点内部立刻播放“无情追击 (Relentless Pursuit)”动画。
- 如果追击动画的终伤没打中玩家(由外部无敌帧检测/闪避检测判定),调用方法强行把黑板的 `IsWeaknessState` 设为 `True`
- **超时期**: 若举盾超过指定时间,未受到攻击,则播放疲惫放下盾牌的动画。
- **返回值**: 整个逻辑播放完毕或被迫中断才返回 `TaskStatus.Success``Failure`
### 📌 节点3`HeavyChargeWindup` (可中断状态动作类 Action)
- **节点名称**: `HeavyChargeWindup`
- **内部逻辑描述**:
- 开场时赋给自身 `SuperArmor` (如果它没有常驻霸体)。
- 开始漫长蓄力(如 2 秒)。
- **核心机制**:监听玩家的 `HeavyAttack` 伤害事件。如果蓄力期间挨到玩家的 `HeavyAttack` 判定,主动中断自身蓄力并分发强硬直事件(触发 `Death & Global Stagger Subtree`)。
- 若蓄力圆满完成,返回 `TaskStatus.Success` 以便下一级节点释放“毁灭性打击”。