- Round 8 report highlights improvements in architecture, editor usability, and data robustness, with a total score of 80/100. - Round 9 report focuses on editor extension capabilities, identifying issues with room data indexing and layout editing, resulting in a score of 76/100. - Round 26 report evaluates the system against commercial standards, noting new issues and confirming previous fixes, with a score of 95.8/100.
537 lines
27 KiB
Markdown
537 lines
27 KiB
Markdown
# 小怪设计 — 程序开发文档 01
|
||
|
||
> 依据《小怪设计-动作需求表-01》整理,供程序端实现参考。
|
||
> 包含:状态机、AI 行为逻辑、技能规格、特殊机制说明。
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
- [E001 草蛭](#e001-草蛭)
|
||
- [E002 簧蛭](#e002-簧蛭)
|
||
- [E003 幼蛭](#e003-幼蛭)
|
||
- [E004 蛭母(小BOSS)](#e004-蛭母小boss)
|
||
- [E005 肥蛭(精英怪)](#e005-肥蛭精英怪)
|
||
- [E006 讙](#e006-讙)
|
||
|
||
---
|
||
|
||
## E001 草蛭
|
||
|
||
### 基本信息
|
||
|
||
| 字段 | 内容 |
|
||
|--------|----------------------------------------------------------------------|
|
||
| 编号 | E001_CaoZhi |
|
||
| 类别 | 小怪 |
|
||
| 行动方式 | 地面爬行 |
|
||
| 核心机制 | 伪装待机 → 发现玩家 → 追击攻击;具备侦测范围触发开关 |
|
||
|
||
### 状态机
|
||
|
||
```
|
||
[Idle_Disguise] ──感知玩家──▶ [Skill_Start]
|
||
│
|
||
[Skill_Loop] ──丢失目标──▶ [Skill_End] ──▶ [Move_Patrol]
|
||
│
|
||
受到足够伤害
|
||
│
|
||
[Death]
|
||
[Move_Patrol] ──感知玩家──▶ [Skill_Start]
|
||
[Move_Patrol] ──到达边界──▶ [Flip] ──▶ [Move_Patrol]
|
||
```
|
||
|
||
### 状态列表
|
||
|
||
| AI状态标识符 | 动画Clip名(Animator用) | 类型 | 说明 |
|
||
|--------------|----------------------|------|----------------------------------------------------|
|
||
| Idle_Disguise | Idle | 循环 | 蜷缩在地面,外观似带植物的石头;每隔随机时间轻微抽搐一次 |
|
||
| Move_Patrol | Move | 循环 | 低速爬行巡逻,可在平台边缘翻转 |
|
||
| Flip | Flip | 单次 | 转向后衔接 Move_Patrol |
|
||
| Skill_Start | Skill_Start | 单次 | 张口,覆盖口水粒子特效,切换至追击状态 |
|
||
| Skill_Loop | Skill_Loop | 循环 | 快速爬行追击玩家 |
|
||
| Skill_End | Skill_End | 单次 | 收回尖牙,切换回巡逻 |
|
||
| Death | Death | 单次 | 身体干瘪(需求表描述:身躯干瘪死亡),播放后移除 GameObject |
|
||
|
||
### AI 行为
|
||
|
||
```
|
||
感知条件:视线检测 OR 碰撞触发区(圆形半径建议可配置)
|
||
├── 未感知玩家 → Idle_Disguise(默认)或 Move_Patrol(已激活后丢失目标)
|
||
└── 感知玩家
|
||
├── 进入 Skill_Start(一次性播放)
|
||
└── 追击 Skill_Loop,速度:[追击速度] > [巡逻速度]
|
||
├── 追击途中碰到玩家 → 造成接触伤害(持续判定)
|
||
└── 超出感知范围 → Skill_End → Move_Patrol
|
||
|
||
注:E001 无主动技能CD;再次进入感知范围立即触发追击
|
||
```
|
||
|
||
### 技能规格
|
||
|
||
| 技能 | 触发条件 | 伤害类型 | 攻击范围 | 备注 |
|
||
|------|----------|--------|-------------|-----------------------------------|
|
||
| 追击啃咬 | 进入感知范围 | 接触伤害 | 自身碰撞体(Collider) | Skill_Loop 期间碰撞盒始终开启;无弹道,纯移动追击 |
|
||
|
||
### 技术备注
|
||
|
||
- Idle 伪装期间建议关闭 NavAgent / 移动组件,仅保留感知触发器。
|
||
- 追击速度、感知范围、伪装抽搐间隔建议通过 ScriptableObject 配置。
|
||
- 死亡无专用受击-死亡过渡动画,HP≤0 直接播放 Death。
|
||
|
||
### 快速参数表(策划待填写)
|
||
|
||
| 参数名 | 说明 | 参考值 |
|
||
|-------------------|-----------------------------|-------|
|
||
| `maxHP` | 最大生命值 | — |
|
||
| `moveSpeed` | 巡逻速度 | — |
|
||
| `chaseSpeed` | 追击速度(Skill_Loop 期间) | — |
|
||
| `detectRadius` | 感知触发半径 | — |
|
||
| `contactDamage` | 接触伤害值 | — |
|
||
|
||
---
|
||
|
||
## E002 簧蛭
|
||
|
||
### 基本信息
|
||
|
||
| 字段 | 内容 |
|
||
|--------|--------------------------------------------------------------|
|
||
| 编号 | E002_HuangZhi |
|
||
| 类别 | 小怪 |
|
||
| 行动方式 | **固定位置**,无法移动,属于陷阱型 |
|
||
| 核心机制 | 藏于天花板 → 玩家经过检测区 → 钻出啃咬 → 悬挂可受击窗口 → 缩回 |
|
||
|
||
### 状态机
|
||
|
||
```
|
||
[Idle_Hidden] ──玩家进入触发区──▶ [Skill_Start]
|
||
│
|
||
[Skill_Loop] (悬挂,可受击)
|
||
│
|
||
冷却结束 / 玩家离开
|
||
│
|
||
[Skill_End] ──▶ [Idle_Hidden]
|
||
|
||
[任意状态] ──HP归零──▶ [Death]
|
||
```
|
||
|
||
### 状态列表
|
||
|
||
| 状态 | 动画名 | 类型 | 说明 |
|
||
|----------|------------|------|-----------------------------------------------|
|
||
| 隐藏待机 | Idle | 循环 | 岩壁上仅露出头部剪影,间歇蠕动 |
|
||
| 攻击发生 | Skill_Start | 单次 | 从岩壁钻出,身躯拉伸甩动,造成伤害 |
|
||
| 悬挂可受击 | Skill_Loop | 循环 | 身体悬挂岩壁轻微晃动;**此阶段碰撞盒开放,可被玩家攻击** |
|
||
| 缩回 | Skill_End | 单次 | 缩回岩壁,过渡到 Idle |
|
||
| 死亡 | Death | 单次 | 爆体溅出黏液,留下短截身体悬挂,关闭碰撞 |
|
||
|
||
### AI 行为
|
||
|
||
```
|
||
持续检测正下方(矩形感知区,宽度略大于自身碰撞体宽度)
|
||
├── 玩家未进入 → Idle_Hidden(冷却计时重置)
|
||
└── 玩家进入触发区 AND 当前为 Idle_Hidden
|
||
├── 进入 Skill_Start:向下延伸,开启攻击碰撞盒
|
||
├── Skill_Start 播放完毕 → Skill_Loop(悬挂)
|
||
│ ├── 悬挂持续时间到 → Skill_End → Idle_Hidden(进入冷却)
|
||
│ └── HP 归零 → Death
|
||
└── 冷却期间玩家再次进入触发区:忽略(等待冷却结束)
|
||
```
|
||
|
||
### 技能规格
|
||
|
||
| 技能 | 触发条件 | 伤害类型 | 攻击范围 | 攻击次数 | 备注 |
|
||
|------|---------------|--------|----------------------|------|----------------|
|
||
| 钻出啃咬 | 玩家进入正下方感知区 | 瞬时伤害 | Skill_Start 期间碰撞盒 | 1 次 | 悬挂期无攻击判定,仅可受击 |
|
||
|
||
### 技术备注
|
||
|
||
- 固定于特定平台点位,不需要 NavAgent。
|
||
- Skill_Loop 期间:攻击碰撞盒关闭,受击碰撞盒开启(可被玩家攻击)。
|
||
- 悬挂时长、冷却时长建议 ScriptableObject 配置。
|
||
- 死亡后保留部分身体 Sprite(不完全消除),可用单独的静态 Sprite 替换。
|
||
|
||
### 快速参数表(策划待填写)
|
||
|
||
| 参数名 | 说明 | 参考值 |
|
||
|-------------------|-----------------------|-------|
|
||
| `maxHP` | 最大生命值 | — |
|
||
| `attackDamage` | 钻出啃咬伤害值 | — |
|
||
| `hangDuration` | Skill_Loop 悬挂时长(秒)| — |
|
||
| `cooldownDuration`| 缩回后进入下次攻击的冷却(秒)| — |
|
||
| `detectWidth` | 感知区水平宽度 | — |
|
||
|
||
---
|
||
|
||
## E003 幼蛭
|
||
|
||
### 基本信息
|
||
|
||
| 字段 | 内容 |
|
||
|--------|---------------------------------------------------|
|
||
| 编号 | E003_YouZhi |
|
||
| 类别 | 小怪 |
|
||
| 行动方式 | 天花板吸附 → 掉落地面 → 地面爬行 |
|
||
| 核心机制 | 两种出现方式:①场景预置于天花板,战斗触发后掉落;②由 E005 肥蛭死亡时 Spawn;极低生命值,一击即死 |
|
||
|
||
### 状态机
|
||
|
||
```
|
||
[Idle_Ceiling] ──战斗区域激活──▶ [Fall] ← 场景预置路径
|
||
[Spawn_Point] ──肥蛭死亡生成──▶ [Fall] ← 肥蛭生成路径
|
||
│
|
||
落地检测
|
||
│
|
||
[Move] ──感知玩家──▶ [Skill]
|
||
│
|
||
[Move] ◀──丢失目标────┘
|
||
|
||
[任意状态] ──HP归零──▶ [Death]
|
||
```
|
||
|
||
### 状态列表
|
||
|
||
| 状态 | 动画名 | 类型 | 说明 |
|
||
|--------|-------|------|------------------------------------|
|
||
| 天花板待机 | Idle | 循环 | 吸附岩壁剪影,间歇蠕动 |
|
||
| 掉落 | Fall | 循环 | 旋转下落,直到落地触发 Move |
|
||
| 地面爬行 | Move | 循环 | 缓慢爬行(速度为基础移动速度) |
|
||
| 快速追击 | Skill | 循环 | 加速爬行追击(速度约 1.5× Move 速度),碰到玩家造成伤害 |
|
||
| 死亡 | Death | 单次 | 溅出少量酸液,身体干瘪,一击即死 |
|
||
|
||
### AI 行为
|
||
|
||
```
|
||
生成时默认处于 Idle_Ceiling
|
||
战斗区域激活 / 被生成 → Fall(重力控制,不受玩家输入影响)
|
||
落地 →
|
||
├── 感知玩家 → Skill(追击)
|
||
│ ├── 接触玩家 → 造成伤害
|
||
│ └── 丢失玩家 → Move(巡逻)
|
||
└── 未感知玩家 → Move
|
||
```
|
||
|
||
### 技能规格
|
||
|
||
| 技能 | 触发条件 | 伤害类型 | 攻击范围 | 备注 |
|
||
|------|----------|--------|-----------|-------------|
|
||
| 快速追击 | 感知玩家 | 接触伤害 | 自身碰撞体 | 一击即死(HP=1) |
|
||
|
||
### 技术备注
|
||
|
||
- Fall 阶段建议使用 Rigidbody 物理重力,不做路径导航。
|
||
- 一击即死:HP 设为 1,任意来源伤害均触发 Death。
|
||
- **出现方式双路支持**:
|
||
- 预置路径:在关卡中放置 Idle_Ceiling 实例,战斗区域触发时激活 Fall;
|
||
- 生成路径:由 E005 肥蛭死亡时调用 `SpawnEnemy(E003, position, count)` 生成,生成后直接进入 Fall 状态。
|
||
|
||
### 快速参数表(策划待填写)
|
||
|
||
| 参数名 | 说明 | 参考值 |
|
||
|-----------------|----------------------|-------|
|
||
| `maxHP` | 最大生命值(一击即死=1)| 1 |
|
||
| `moveSpeed` | 落地后爬行速度 | — |
|
||
| `chaseSpeed` | 追击速度 | — |
|
||
| `detectRadius` | 感知半径 | — |
|
||
| `contactDamage` | 接触伤害值 | — |
|
||
|
||
---
|
||
|
||
## E004 蛭母(小BOSS)
|
||
|
||
### 基本信息
|
||
|
||
| 字段 | 内容 |
|
||
|--------|--------------------------------------------------------------------------|
|
||
| 编号 | E004_ZhiMu |
|
||
| 类别 | 小 BOSS |
|
||
| 行动方式 | 地面移动 |
|
||
| 核心机制 | 有出场剧情;具备三种技能(撕咬、头槌连段、酸液远程);死亡分两阶段(死前挣扎 → 爆体消散) |
|
||
|
||
### 状态机
|
||
|
||
```
|
||
[Static] ──战斗触发──▶ [Appear] ──完毕──▶ [Idle]
|
||
|
||
[Idle] ──AI 决策──┬──▶ [Skill01_Bite](撕咬)
|
||
├──▶ [Skill02_Start](头槌前摇)──▶ [Skill02_Loop]──▶ [Skill02_End]
|
||
├──▶ [Skill03_Acid](酸液喷吐)
|
||
└──▶ [Move] ──到达位置──▶ [Idle]
|
||
|
||
[Move] ──玩家跳至身后──▶ [Flip] ──▶ [Move / Idle]
|
||
|
||
[任意战斗状态] ──HP归零──▶ [Death_Pre] ──循环结束──▶ [Death]
|
||
```
|
||
|
||
### 状态列表
|
||
|
||
| 状态 | 动画名 | 类型 | 说明 |
|
||
|-------------|------------|------|------------------------------------------|
|
||
| 休眠静止 | Static | 循环 | 战斗未触发,牙齿收拢,头部低垂 |
|
||
| 出场 | Appear | 单次 | 吼叫示威,结束衔接 Idle |
|
||
| 战斗待机 | Idle | 循环 | 呼吸待机,触手轻微蠕动 |
|
||
| 移动 | Move | 循环 | 向玩家方向移动,调整攻击距离 |
|
||
| 转身 | Flip | 单次 | 玩家绕至身后时触发 |
|
||
| 撕咬 | Skill01 | 单次 | 近程,头部后蓄力后前突啃咬;前摇明显 |
|
||
| 头槌前摇 | Skill02_Start | 单次 | 头部蜷缩成球蓄力 |
|
||
| 头槌循环 | Skill02_Loop | 循环 | 反复砸地(单次砸地动作循环),可配置砸地次数 |
|
||
| 头槌结束 | Skill02_End | 单次 | 喘息硬直,**此阶段可受击,攻击不判定** |
|
||
| 酸液喷吐 | Skill_03 | 单次 | 嘴部抖动后向上喷出多团酸液,以抛物线散落 |
|
||
| 死亡前挣扎 | Death_Pre | 循环 | HP 归零后触发,僵直挣扎;持续固定时间后衔接 Death |
|
||
| 死亡 | Death | 单次 | 爆体,溅出黏液,消散 |
|
||
|
||
### AI 行为
|
||
|
||
```
|
||
战斗循环(Idle 为决策节点):
|
||
1. 检测玩家距离
|
||
├── 玩家超出近战范围 → Move(靠近)
|
||
└── 玩家在近战范围内 → 技能选择
|
||
2. 技能选择(权重/CD轮转,建议策划可配置):
|
||
├── Skill01(撕咬):玩家在近距离且正面 → 近程突刺伤害;CD:[skill01CD]秒
|
||
├── Skill02(头槌):玩家在近中距离 → 多次砸地造成范围震地伤害;CD:[skill02CD]秒
|
||
└── Skill03(酸液):玩家距离较远/刚进入战斗 → 向玩家位置抛出多颗酸液弹;CD:[skill03CD]秒
|
||
3. 玩家绕后(跳跃至蛭母身后)→ 优先插入 Flip,仅从 Idle 或 Move 状态触发
|
||
⚠️ 注:Flip 不可打断正在施放的技能
|
||
```
|
||
|
||
### 技能规格
|
||
|
||
#### Skill01 — 撕咬
|
||
|
||
| 字段 | 值 |
|
||
|----------|------------------------|
|
||
| 攻击类型 | 近程瞬时 |
|
||
| 攻击范围 | 头部前方碰撞盒(宽×高可配置) |
|
||
| 伤害帧 | 动作到达最前伸位置时判定(单帧) |
|
||
| 前摇 | 较大(动画帧数见动作需求表) |
|
||
| 硬直(玩家) | 策划配置 |
|
||
|
||
#### Skill02 — 头槌
|
||
|
||
| 字段 | 值 |
|
||
|----------|----------------------------------|
|
||
| 攻击类型 | 范围震地 |
|
||
| 伤害范围 | 砸地落点附近圆形/矩形区域(建议策划配置半径) |
|
||
| 砸地次数 | 可配置(建议 2–4 次) |
|
||
| 每次间隔 | 由 Skill02_Loop 动画帧率决定 |
|
||
| 硬直窗口 | Skill02_End 阶段为硬直,期间关闭攻击盒,开放受击 |
|
||
|
||
#### Skill03 — 酸液喷吐
|
||
|
||
| 字段 | 值 |
|
||
|----------|--------------------------------------------------|
|
||
| 攻击类型 | 远程抛物弹道 |
|
||
| 弹数 | 多颗(可配置,建议 3–5 颗) |
|
||
| 落点分布 | 以玩家当前位置为中心,向两侧随机偏移散布(建议策划配置范围) |
|
||
| 弹道 | 抛物线(设置初速度与重力系数即可) |
|
||
| 落地效果 | 酸液溅射粒子 + 落地持续伤害区(建议策划决定是否留存伤害区域) |
|
||
|
||
### 技术备注
|
||
|
||
- Appear 动画播放期间暂停 AI,完成后激活战斗循环。
|
||
- 技能 CD 和选择权重建议独立 ScriptableObject 配置。
|
||
- Death_Pre 结束后短暂白屏/闪光特效,再播放 Death。
|
||
- 转身(Flip)需检测玩家相对朝向,仅在 Idle / Move 状态下每帧检测,技能执行中不检测。
|
||
|
||
### 快速参数表(策划待填写)
|
||
|
||
| 参数名 | 说明 | 参考值 |
|
||
|-------------------|---------------------------|-------|
|
||
| `maxHP` | 最大生命值 | — |
|
||
| `moveSpeed` | 移动速度 | — |
|
||
| `detectRange` | 感知距离 | — |
|
||
| `skill01Damage` | 撕咬伤害 | — |
|
||
| `skill01CD` | 撕咬冷却(秒) | — |
|
||
| `skill02HitCount` | 头槌砸地次数 | — |
|
||
| `skill02Damage` | 每次头槌伤害 | — |
|
||
| `skill02CD` | 头槌冷却(秒) | — |
|
||
| `skill02StaggerDuration` | Skill02_End 硬直时长 | — |
|
||
| `skill03Count` | 酸液弹数 | — |
|
||
| `skill03Damage` | 每颗酸液伤害 | — |
|
||
| `skill03CD` | 酸液冷却(秒) | — |
|
||
|
||
---
|
||
|
||
## E005 肥蛭(精英怪)
|
||
|
||
### 基本信息
|
||
|
||
| 字段 | 内容 |
|
||
|--------|------------------------------------------|
|
||
| 编号 | E005_FeiZhi |
|
||
| 类别 | 精英怪 |
|
||
| 行动方式 | 地面移动(移动缓慢,体型大) |
|
||
| 核心机制 | 死亡时在原位生成若干 E003 幼蛭;具备近程撕咬和远程酸液两种技能 |
|
||
|
||
### 状态机
|
||
|
||
```
|
||
[Idle] ──AI决策──┬──▶ [Move] ──到达位置──▶ [Idle]
|
||
├──▶ [Skill01_Bite](撕咬)──▶ [Idle]
|
||
└──▶ [Skill02_Acid](酸液)──▶ [Idle]
|
||
|
||
[任意战斗状态] ──HP归零──▶ [Death_Pre] ──播放完毕──▶ [Death](生成幼蛭 + 爆体)
|
||
```
|
||
|
||
### 状态列表
|
||
|
||
| 状态 | 动画名 | 类型 | 说明 |
|
||
|----------|----------|------|----------------------------------------------|
|
||
| 待机 | Idle | 循环 | 呼吸待机 |
|
||
| 移动 | Move | 循环 | 肥硕扭动,移动速度较低 |
|
||
| 撕咬 | Skill01 | 单次 | 近程前伸啃咬;攻击结束后有趴地硬直,再起身回 Idle |
|
||
| 酸液 | Skill02 | 单次 | 连续两次吐出酸液团(逻辑上循环两次单次动画,或直接做循环动画) |
|
||
| 死亡前挣扎 | Death_Pre | 循环 | HP 归零后触发,肚子膨胀蠕动,表现有东西即将钻出 |
|
||
| 死亡 | Death | 单次 | 肚子爆开,溅出酸液,同时 Spawn 幼蛭 |
|
||
|
||
### AI 行为
|
||
|
||
```
|
||
战斗循环:
|
||
检测玩家距离
|
||
├── 远距离 → Skill02(酸液远程攻击)或 Move 靠近;CD:[skill02CD]秒
|
||
└── 近距离 → Skill01(撕咬);CD:[skill01CD]秒
|
||
|
||
死亡触发(特殊):
|
||
HP ≤ 0 → Death_Pre → Death
|
||
Death 动画关键帧事件(或 AnimationEvent)触发:
|
||
SpawnEnemies(E003_YouZhi, count=策划配置, position=自身位置)
|
||
```
|
||
|
||
### 技能规格
|
||
|
||
#### Skill01 — 撕咬
|
||
|
||
| 字段 | 值 |
|
||
|------|--------------------------------|
|
||
| 攻击范围 | 头部前方碰撞盒 |
|
||
| 伤害帧 | 最前伸位置单帧判定 |
|
||
| 后摇 | 趴地硬直后自动起身(硬直时长可配置,期间可受击,建议与 E004 Skill02_End 相同逻辑) |
|
||
|
||
#### Skill02 — 酸液喷吐
|
||
|
||
| 字段 | 值 |
|
||
|------|-------------------------------------|
|
||
| 弹数 | 2 次(每次一团) |
|
||
| 弹道 | 抛物线,落点为玩家方向前方(建议有随机偏移) |
|
||
| 落地效果 | 酸液溅射粒子(策划决定是否留持续伤害区) |
|
||
|
||
#### 死亡生成幼蛭
|
||
|
||
| 字段 | 值 |
|
||
|--------|--------------------------|
|
||
| 触发时机 | Death 动画指定帧(AnimationEvent) |
|
||
| 生成数量 | 可配置(建议 2–4 只) |
|
||
| 生成位置 | 自身位置 ± 随机小偏移 |
|
||
|
||
### 技术备注
|
||
|
||
- Skill01 后摇(趴地)阶段建议关闭攻击碰撞盒、开放受击碰撞盒。
|
||
- Death_Pre 到 Death 为必须完整播放,不可被打断(无敌帧)。
|
||
- 幼蛭生成逻辑建议用 AnimationEvent 调用,避免时序问题。
|
||
- ⚠️ **待策划确认**:E005 肥蛭是否有专用 Flip(转身)动画?需求表未标注,程序暂按"无 Flip,使用 Sprite 直接翻转"处理。
|
||
|
||
### 快速参数表(策划待填写)
|
||
|
||
| 参数名 | 说明 | 参考值 |
|
||
|-------------------|-----------------------|-------|
|
||
| `maxHP` | 最大生命值 | — |
|
||
| `moveSpeed` | 移动速度 | — |
|
||
| `detectRange` | 感知距离 | — |
|
||
| `skill01Damage` | 撕咬伤害 | — |
|
||
| `skill01CD` | 撕咬冷却(秒) | — |
|
||
| `skill01StaggerDuration` | 撕咬后趴地硬直时长(秒)| — |
|
||
| `skill02Count` | 酸液弹数(2次) | 2 |
|
||
| `skill02Damage` | 每次酸液伤害 | — |
|
||
| `skill02CD` | 酸液冷却(秒) | — |
|
||
| `spawnCount` | 死亡时生成幼蛭数量 | — |
|
||
|
||
---
|
||
|
||
## E006 讙
|
||
|
||
### 基本信息
|
||
|
||
| 字段 | 内容 |
|
||
|--------|--------------------------------------------------|
|
||
| 编号 | E006_Huan |
|
||
| 类别 | 小怪 |
|
||
| 行动方式 | 地面巡逻 + 跳跃突进攻击 |
|
||
| 核心机制 | 发现玩家后向前跳跃爪击;跳跃位移由程序控制,动画只做原地滞空攻击动作 |
|
||
|
||
### 状态机
|
||
|
||
```
|
||
[Idle] ──感知玩家──▶ [Skill](循环,每次抵达玩家位置后判断是否继续追击)
|
||
[Idle] ──巡逻计时──▶ [Move] ──到达边界/计时结束──▶ [Flip] ──▶ [Move / Idle]
|
||
[Skill] ──丢失目标──▶ [Idle]
|
||
|
||
[任意状态] ──HP归零──▶ [Death]
|
||
```
|
||
|
||
### 状态列表
|
||
|
||
| 状态 | 动画名 | 类型 | 说明 |
|
||
|------|-------|------|------------------------------------------------------|
|
||
| 待机 | Idle | 循环 | 静止呼吸 |
|
||
| 巡逻 | Move | 循环 | 慢步巡逻 |
|
||
| 转身 | Flip | 单次 | 转向衔接 |
|
||
| 跳跃爪击 | Skill | 循环 | 动画做原地起跳 + 滞空爪击动作;程序负责在起跳时给予水平方向速度(向玩家方向冲刺) |
|
||
| 死亡 | Death | 单次 | 四肢瘫软倒地 |
|
||
|
||
### AI 行为
|
||
|
||
```
|
||
感知条件:视线检测(正面范围扇形)
|
||
├── 未感知 → Move 巡逻 / Idle 间歇站立
|
||
└── 感知玩家
|
||
├── 进入 Skill:起跳前摇帧触发水平速度(程序施加冲量)
|
||
├── 滞空到达玩家附近或落地 → 造成伤害判定
|
||
└── 落地后:
|
||
├── 玩家仍在感知范围 → 等待 [attackInterval]秒 → 再次 Skill
|
||
└── 玩家离开范围 → 回到 Idle
|
||
⚠️ 落地后无专用着地动画(需求表未标注),程序直接切回 Idle 或 Move
|
||
```
|
||
|
||
### 技能规格
|
||
|
||
| 技能 | 触发条件 | 伤害类型 | 攻击范围 | 备注 |
|
||
|--------|----------|--------|------------------|-------------------------------------------|
|
||
| 跳跃爪击 | 感知玩家 | 瞬时伤害 | 爪部碰撞盒(滞空期间开启) | 动画仅原地,程序在动画起跳帧给 Rigidbody 施加水平冲量 |
|
||
|
||
### 技术备注
|
||
|
||
- 跳跃时机:动画起跳帧(AnimationEvent)触发程序施加水平 + 垂直速度。
|
||
- 攻击碰撞盒仅在滞空爪击关键帧区间内开启。
|
||
- 死亡后尸体消散由程序控制(淡出/粒子),动画仅播放倒地。
|
||
- 多只讙建议使用同一 ScriptableObject 共享 AI 参数。
|
||
|
||
### 快速参数表(策划待填写)
|
||
|
||
| 参数名 | 说明 | 参考值 |
|
||
|------------------|--------------------------|-------|
|
||
| `maxHP` | 最大生命值 | — |
|
||
| `moveSpeed` | 巡逻速度 | — |
|
||
| `detectRange` | 感知距离(正面扇形半径) | — |
|
||
| `jumpForceX` | 起跳水平冲量 | — |
|
||
| `jumpForceY` | 起跳垂直冲量 | — |
|
||
| `attackDamage` | 爪击伤害值 | — |
|
||
| `attackInterval` | 落地到下次起跳的间隔(秒) | — |
|
||
|
||
---
|
||
|
||
## 通用开发规范
|
||
|
||
1. **状态机实现**:建议使用 `BaseGames` 框架中现有的状态机组件(参考 `BaseGames.Enemies.AI`)。
|
||
2. **伤害判定**:所有技能攻击碰撞盒统一通过 `HitboxComponent` 管理,开关由动画事件(`AnimationEvent`)驱动。
|
||
3. **AI 参数配置**:感知范围、速度、技能 CD、伤害值均放入对应 `EnemyData ScriptableObject`,禁止硬编码。
|
||
4. **死亡流程**:HP ≤ 0 后禁用 AI 与移动,播放 Death 动画,动画结束后由对象池回收(或销毁)。
|
||
5. **特效时机**:粒子特效(溅液、酸液落点等)统一通过 `AnimationEvent` 调用 `VFXManager.Play(key)`。
|
||
6. **受击处理**:本需求表中所有小怪均**无专用受击动画**(需求表未定义)。受击反馈统一使用:
|
||
- 程序层:短暂无敌帧 + 闪烁(Hit Flash)
|
||
- 音效层:通用受击音效(AudioManager 播放)
|
||
- 不打断当前动画;如需特定怪专用受击动作,请策划单独补充
|
||
7. **动画Clip命名 vs AI状态命名**:部分敌人的 AI 逻辑状态标识符与 Animator Clip 名称不同(如 E001 草蛭的 `Idle_Disguise` 状态对应 Clip 名 `Idle`),各角色章节的"状态列表"表格已分列"AI状态标识符"和"动画Clip名"两列,请以该表格为准实现,避免混淆。
|