Files
zeling_v2/Docs/Game/Design/小怪设计-程序开发文档-01.md
Joywayer f74d7f1877 Add independent review reports for Minimap system (Rounds 8, 9, and 26)
- 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.
2026-05-25 23:15:12 +08:00

27 KiB
Raw Blame History

小怪设计 — 程序开发文档 01

依据《小怪设计-动作需求表-01》整理供程序端实现参考。
包含状态机、AI 行为逻辑、技能规格、特殊机制说明。


目录


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 — 头槌

字段
攻击类型 范围震地
伤害范围 砸地落点附近圆形/矩形区域(建议策划配置半径)
砸地次数 可配置(建议 24 次)
每次间隔 由 Skill02_Loop 动画帧率决定
硬直窗口 Skill02_End 阶段为硬直,期间关闭攻击盒,开放受击

Skill03 — 酸液喷吐

字段
攻击类型 远程抛物弹道
弹数 多颗(可配置,建议 35 颗)
落点分布 以玩家当前位置为中心,向两侧随机偏移散布(建议策划配置范围)
弹道 抛物线(设置初速度与重力系数即可)
落地效果 酸液溅射粒子 + 落地持续伤害区(建议策划决定是否留存伤害区域)

技术备注

  • 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
生成数量 可配置(建议 24 只)
生成位置 自身位置 ± 随机小偏移

技术备注

  • 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名"两列,请以该表格为准实现,避免混淆。