chore: initial commit
This commit is contained in:
333
Docs/Design/23_GameFeelTuningGuide.md
Normal file
333
Docs/Design/23_GameFeelTuningGuide.md
Normal file
@@ -0,0 +1,333 @@
|
||||
# 23 · 游戏手感调优指南(Game Feel Tuning Guide)
|
||||
|
||||
> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md)
|
||||
> **适用人员** 策划 / 程序员 / 动画师
|
||||
> **相关系统** `BaseGames.Combat` · `BaseGames.Feedback` · `BaseGames.Player` · Feel/MMFeedbacks
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [设计理念](#1-设计理念)
|
||||
2. [玩家移动参数](#2-玩家移动参数)
|
||||
3. [跳跃手感参数](#3-跳跃手感参数)
|
||||
4. [输入缓冲时长](#4-输入缓冲时长)
|
||||
5. [战斗打击感参数](#5-战斗打击感参数)
|
||||
6. [弹反系统参数](#6-弹反系统参数)
|
||||
7. [受伤 / 死亡反馈](#7-受伤--死亡反馈)
|
||||
8. [BOSS 战手感规范](#8-boss-战手感规范)
|
||||
9. [镜头与屏幕震动配置表](#9-镜头与屏幕震动配置表)
|
||||
10. [音效音量平衡](#10-音效音量平衡)
|
||||
11. [Feel MMF_Player 预设速查表](#11-feel-mmf_player-预设速查表)
|
||||
12. [调优工作流 SOP](#12-调优工作流-sop)
|
||||
|
||||
---
|
||||
|
||||
## 1. 设计理念
|
||||
|
||||
**参考标准**:以《丝之歌》(Silksong)公开 Demo 的手感为目标基准。核心原则:
|
||||
|
||||
- **每个动作都有清晰的起手/作用/收手**(三段式):玩家永远知道自己处于哪个阶段
|
||||
- **惩罚感知而非惩罚玩家**:错误不是数值惩罚,而是视觉/音效让玩家自我意识到失误
|
||||
- **快节奏但有分量**:帧数越少越爽,但每一击都要有重量感(Hitstop + 音效 + 震动三合一)
|
||||
- **可预测的反馈**:同一输入在不同场景产生相同手感,避免奇怪的边界情况
|
||||
|
||||
**手感调优顺序**:
|
||||
```
|
||||
1. 移动 & 跳跃(地基,最先确定)
|
||||
2. 攻击手感(Hitstop、音效、VFX)
|
||||
3. 受伤反馈(无敌帧、击退)
|
||||
4. 弹反(窗口、回报感)
|
||||
5. BOSS 战(电报/前摇/节奏)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 玩家移动参数
|
||||
|
||||
### 2.1 推荐基准值
|
||||
|
||||
| 参数 | 推荐值 | 说明 |
|
||||
|------|--------|------|
|
||||
| 最大地面移速 | **8.5 units/s** | 匀速跑动,适合横向扫图 |
|
||||
| 最大空中移速 | **7.5 units/s** | 略低于地面,保留空中操控感 |
|
||||
| 地面加速度 | **80 units/s²** | 约 0.1s 达到最大速度,起步不能太滑 |
|
||||
| 地面减速度 | **120 units/s²** | 松开方向键时比加速更快停下(紧实感)|
|
||||
| 空中水平加速 | **60 units/s²** | 慢于地面,有飘逸感 |
|
||||
| 空中水平减速 | **50 units/s²** | 空气阻力模拟 |
|
||||
| 重力倍率(下降) | **3.5** | 跌落要快,避免漂浮感 |
|
||||
| 重力倍率(上升) | **2.5** | 起跳要有力量感,上升弧线陡峭 |
|
||||
|
||||
### 2.2 PlayerMovement 速查参数名
|
||||
|
||||
```
|
||||
PlayerMovementConfigSO:
|
||||
moveSpeed = 8.5
|
||||
airMoveSpeed = 7.5
|
||||
groundAcceleration = 80
|
||||
groundDeceleration = 120
|
||||
airAcceleration = 60
|
||||
airDeceleration = 50
|
||||
gravityScaleUp = 2.5 (上升时 Rigidbody2D.gravityScale)
|
||||
gravityScaleDown = 3.5 (下降时)
|
||||
maxFallSpeed = -28 (最大下落速度,防止穿地)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 跳跃手感参数
|
||||
|
||||
| 参数 | 推荐值 | 说明 |
|
||||
|------|--------|------|
|
||||
| 跳跃初速度 | **18 units/s** | 跳起来有力量感 |
|
||||
| 二段跳初速度 | **16 units/s** | 略低,体现"空气中借力"感 |
|
||||
| 土狼时间(Coyote Time) | **0.15 s** | 走过平台边缘后仍可起跳 |
|
||||
| 跳跃缓冲(Jump Buffer) | **0.12 s** | 落地前提前按跳跃仍然有效 |
|
||||
| 短跳切断时间(Jump Cut) | 长按 = 全跳;松开后 0.05s 内速度削减至 60% | 短按跳低,长按跳高 |
|
||||
| 壁跳速度(水平) | **12 units/s**(反向) | 离墙跳出,不粘墙 |
|
||||
| 壁跳速度(垂直) | **14 units/s** | 可配合二段跳向上突进 |
|
||||
| 蹲下跳(下 + 跳,单向平台) | 忽略平台 0.3s | 按时间,不按速度 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 输入缓冲时长
|
||||
|
||||
输入缓冲允许玩家比实际判定稍早按下按键并依然生效,减少"明明按了但没反应"的挫败感:
|
||||
|
||||
| 动作 | 缓冲时长 | 备注 |
|
||||
|------|---------|------|
|
||||
| 跳跃 | **0.12 s** | 空中/落地前均缓冲 |
|
||||
| 攻击 | **0.08 s** | 动画取消窗口内可缓冲下一攻击 |
|
||||
| 冲刺 | **0.10 s** | 攻击前摇中可缓冲冲刺(若取消窗口开启)|
|
||||
| 弹反 | **0.06 s** | 严格,弹反窗口精确(奖励精确操作)|
|
||||
| 法术 | **0.10 s** | 落地后立即施法生效 |
|
||||
| 互动 | **0.20 s** | 接近 NPC 时可提前按 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 战斗打击感参数
|
||||
|
||||
### 5.1 Hitstop(定格帧)
|
||||
|
||||
Hitstop 是命中瞬间游戏时间短暂冻结,增强打击感:
|
||||
|
||||
| 击中类型 | Hitstop 时长 | 时间缩放 |
|
||||
|---------|------------|--------|
|
||||
| 轻击 | **0.05 s** | TimeScale = 0.05 |
|
||||
| 中击 | **0.10 s** | TimeScale = 0.05 |
|
||||
| 重击 / 终结技 | **0.15 s** | TimeScale = 0.0 |
|
||||
| 弹反成功 | **0.20 s** | TimeScale = 0.0(完全冻结)|
|
||||
| 受到伤害(玩家) | **0.07 s** | TimeScale = 0.05 |
|
||||
| BOSS 进入新阶段 | **0.35 s** | TimeScale = 0.0 |
|
||||
|
||||
> **注意**:Hitstop 期间 Animancer 也应暂停(通过 `animancer.Speed = 0`),否则动画继续播放会破坏效果。
|
||||
|
||||
**HitstopSO 配置**(`BaseGames.Feedback.HitstopConfigSO`):
|
||||
|
||||
```csharp
|
||||
[CreateAssetMenu(menuName = "Feedback/HitstopConfig")]
|
||||
public class HitstopConfigSO : ScriptableObject
|
||||
{
|
||||
[Serializable]
|
||||
public struct HitstopEntry
|
||||
{
|
||||
public HitWeight weight;
|
||||
public float duration;
|
||||
[Range(0f, 0.1f)]
|
||||
public float timeScale;
|
||||
}
|
||||
public HitstopEntry[] entries;
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 击退(Knockback)参数
|
||||
|
||||
| 击中类型 | 水平力 | 垂直力 | 说明 |
|
||||
|---------|-------|-------|------|
|
||||
| 轻击 | **6** | **3** | 敌人小幅后退 |
|
||||
| 中击 | **10** | **5** | 敌人明显弹飞 |
|
||||
| 重击 | **16** | **8** | 敌人强力弹飞 |
|
||||
| 玩家受击(轻) | **5** | **2** | 轻微后退 |
|
||||
| 玩家受击(重) | **9** | **5** | 玩家摔跌感 |
|
||||
|
||||
击退曲线(`AnimationCurve`)建议:
|
||||
|
||||
```
|
||||
时间 0.0 → 1.0 的 velocity 衰减曲线:
|
||||
起点: 1.0(最大速度)
|
||||
0.3: 0.7(线性段)
|
||||
0.7: 0.2(开始减速)
|
||||
终点: 0.0(完全停止)
|
||||
|
||||
曲线类型: EaseInOutCubic(前段快,后段急停)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 弹反系统参数
|
||||
|
||||
| 参数 | 推荐值 | 说明 |
|
||||
|------|--------|------|
|
||||
| 弹反前摇(Startup) | **0.05 s** | 弹反有输入延迟,需预判 |
|
||||
| 弹反判定窗口(Active) | **0.28 s** | 约 17 帧(60fps),宽松但非无限 |
|
||||
| 弹反收手(Recovery) | **0.10 s** | 若弹反失败,收手期间可受击 |
|
||||
| 成功弹反后无敌帧 | **0.3 s** | 完美弹反后短暂无敌 |
|
||||
| 弹反回血 | **+0 HP**(仅 Soul 回复 10)| 弹反奖励为 Soul 而非 HP |
|
||||
| 对 BOSS 弹反 | Soul + 15;BOSS 硬直 0.5s | 高风险高回报 |
|
||||
| 弹反冲击波范围 | **2 units** | 可打退附近小型敌人 |
|
||||
|
||||
> **弹反感知设计**:弹反成功时播放 `Parry_Success_Heavy` 预设(Hitstop 0.2s + 光环闪光 + 振动 + 专属音效),即使面对普通敌人也要有"神级操作"的反馈。
|
||||
|
||||
---
|
||||
|
||||
## 7. 受伤 / 死亡反馈
|
||||
|
||||
### 7.1 玩家受伤
|
||||
|
||||
| 参数 | 推荐值 |
|
||||
|------|--------|
|
||||
| 无敌帧时长(正常受击) | **1.8 s** |
|
||||
| 无敌帧时长(蹲下受击) | **1.2 s** |
|
||||
| 无敌帧闪烁频率 | **0.1 s 间隔**(10 fps 闪烁)|
|
||||
| 受伤时摄像机震动 | Magnitude 0.3 / Frequency 20 / Duration 0.3s |
|
||||
| 受伤时屏幕红边 Vignette | 透明度 0.5 → 0 渐出,0.4s |
|
||||
| 受伤停手时间(控制锁定) | **0.2 s**(允许无敌帧内仍可移动)|
|
||||
|
||||
### 7.2 玩家死亡
|
||||
|
||||
| 阶段 | 时长 | 效果 |
|
||||
|------|------|------|
|
||||
| 死亡 Hitstop | **0.5 s** | TimeScale → 0 |
|
||||
| 死亡动画播放 | **1.2 s** | 玩家倒地 / 破碎动画 |
|
||||
| 画面淡黑 | **0.8 s** | 从透明 → 全黑 |
|
||||
| 复活场景淡入 | **0.5 s** | 在最近存档点淡入 |
|
||||
| 冥影生成(Shade 生成) | 死亡 1s 后 | 在死亡位置生成 DeathShade |
|
||||
|
||||
---
|
||||
|
||||
## 8. BOSS 战手感规范
|
||||
|
||||
### 8.1 电报(Telegraph)时序
|
||||
|
||||
| 攻击类型 | 电报时长 | 前摇时长 | 作用时长 | 收手时长 |
|
||||
|---------|--------|--------|--------|--------|
|
||||
| 普通近战 | **0.4 s** | **0.2 s** | **0.3 s** | **0.4 s** |
|
||||
| 重型近战 | **0.6 s** | **0.4 s** | **0.5 s** | **0.7 s** |
|
||||
| 远程弹射 | **0.5 s** | **0.3 s** | **0.4 s** | **0.4 s** |
|
||||
| 范围爆炸 | **1.0 s** | **0.5 s** | **0.2 s**(瞬间) | **0.8 s** |
|
||||
| 冲刺攻击 | **0.3 s** | **0.2 s** | (持续至碰墙) | **0.6 s** |
|
||||
|
||||
> **原则**:电报时长与攻击伤害成正比。一击必杀类攻击电报 ≥ 0.8s,确保玩家有逃避时间。
|
||||
|
||||
### 8.2 BOSS 节奏规范
|
||||
|
||||
| 参数 | 推荐值 | 说明 |
|
||||
|------|--------|------|
|
||||
| 连招最大次数 | **3 连击** | 第三击后强制空档期 |
|
||||
| 空档期(Idle Gap) | **0.8 ~ 1.2 s** | 随机化,避免可预测节拍 |
|
||||
| 阶段切换无敌时间 | **1.5 s** | 切换阶段时玩家无法伤害 BOSS |
|
||||
| 阶段切换冻结时间 | **0.5 s** | TimeScale → 0,营造戏剧感 |
|
||||
| 二阶段进入速度加成 | **+15%** | 攻击速度加快,玩家需重新适应节奏 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 镜头与屏幕震动配置表
|
||||
|
||||
使用 Cinemachine 3 的 `CinemachineImpulseSource` + Feel 的 `MMCinemachineImpulse`:
|
||||
|
||||
| 事件 | Amplitude | Frequency | Duration | 衰减类型 |
|
||||
|------|-----------|-----------|----------|----------|
|
||||
| 轻击命中 | **0.1** | 10 | **0.15 s** | 快速衰减 |
|
||||
| 中击命中 | **0.2** | 15 | **0.20 s** | 快速衰减 |
|
||||
| 重击命中 | **0.4** | 20 | **0.30 s** | 中速衰减 |
|
||||
| 弹反成功 | **0.5** | 25 | **0.25 s** | 瞬间峰值 + 快速衰减 |
|
||||
| 玩家受击 | **0.3** | 18 | **0.30 s** | 快速衰减 |
|
||||
| 玩家死亡 | **0.6** | 12 | **0.50 s** | 慢速衰减 |
|
||||
| 落地重击 | **0.25** | 15 | **0.20 s** | 快速衰减 |
|
||||
| BOSS 阶段切换 | **0.8** | 8 | **0.60 s** | 慢速衰减 |
|
||||
| BOSS 死亡 | **1.0** | 6 | **1.00 s** | 极慢衰减 |
|
||||
|
||||
**镜头追踪参数**:
|
||||
|
||||
| 参数 | 推荐值 |
|
||||
|------|--------|
|
||||
| 水平追踪 Damping | **0.15 s** | 快速跟上水平移动 |
|
||||
| 垂直追踪 Damping | **0.25 s** | 稍慢,跳跃时镜头延迟跟随 |
|
||||
| 垂直偏移(俯冲先见) | 向速度方向偏移 **1.5 units** | 奔跑方向可看到更多前方 |
|
||||
| 向下看偏移(下蹲) | **-2.0 units**( 按住 ↓ 激活)| 可看到脚下平台 |
|
||||
| 向上看偏移(上按键) | **+3.0 units** | 可看到头顶区域 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 音效音量平衡
|
||||
|
||||
所有音量值均为 Unity AudioMixer 分组的相对 dB 值(主混音组 = 0 dB):
|
||||
|
||||
| 音效类型 | AudioMixer 分组 | 推荐电平 |
|
||||
|---------|----------------|---------|
|
||||
| BGM | `BGM` | **-6 dB** |
|
||||
| 环境音 | `Ambience` | **-12 dB** |
|
||||
| 玩家脚步 | `SFX_Player` | **-8 dB** |
|
||||
| 玩家攻击音效 | `SFX_Player` | **-3 dB** |
|
||||
| 玩家受击音效 | `SFX_Player` | **-2 dB** |
|
||||
| 敌人普通音效 | `SFX_Enemy` | **-6 dB** |
|
||||
| BOSS 音效 | `SFX_Enemy` | **-3 dB** |
|
||||
| UI 音效 | `SFX_UI` | **-10 dB** |
|
||||
| 弹反成功音效 | `SFX_Player` | **0 dB**(最响,高奖励感)|
|
||||
|
||||
**动态闪避(Audio Ducking)规则**:
|
||||
- BOSS 进入 → BGM 淡出至 -18 dB(0.5s 渐变),BOSS BGM 淡入
|
||||
- BOSS 死亡 → BOSS BGM 淡出(1.0s)→ 区域 BGM 淡入(0.8s)
|
||||
- 弹反成功音效播放时 → 其他 SFX 临时降至 -6 dB(0.1s)→ 恢复(0.2s)
|
||||
|
||||
---
|
||||
|
||||
## 11. Feel MMF_Player 预设速查表
|
||||
|
||||
所有预设存放于 `Assets/ScriptableObjects/Feedback/Presets/`:
|
||||
|
||||
| 预设名 | 包含 Feedback | 主要参数 |
|
||||
|--------|--------------|---------|
|
||||
| `Hit_Light` | MMF_CameraShake + MMF_AudioPlay | Amplitude 0.1, 0.15s, SFX_击中_轻 |
|
||||
| `Hit_Medium` | MMF_CameraShake + MMF_AudioPlay + MMF_Freeze | Amplitude 0.2, 0.2s, Freeze 0.1s |
|
||||
| `Hit_Heavy` | MMF_CameraShake + MMF_AudioPlay + MMF_Freeze + MMF_Flash | Amplitude 0.4, 0.3s, Freeze 0.15s |
|
||||
| `Parry_Success` | MMF_CameraShake + MMF_AudioPlay + MMF_Freeze + MMF_Flash + MMF_Particles | Amplitude 0.5, 0.25s, Freeze 0.2s, 专属粒子爆发 |
|
||||
| `Player_Hurt` | MMF_CameraShake + MMF_AudioPlay + MMF_Vignette | Amplitude 0.3, 0.3s, 红色渐变 |
|
||||
| `Player_Death` | MMF_CameraShake + MMF_AudioPlay + MMF_Freeze + MMF_ScreenFade | Amplitude 0.6, 0.5s, Freeze 0.5s |
|
||||
| `Land_Normal` | MMF_CameraShake + MMF_Particles + MMF_AudioPlay | Amplitude 0.15, 0.2s, 轻尘粒子 |
|
||||
| `Land_Heavy` | MMF_CameraShake + MMF_Particles + MMF_AudioPlay | Amplitude 0.3, 0.25s, 重尘粒子 |
|
||||
| `Boss_Roar` | MMF_CameraShake + MMF_AudioPlay + MMF_Freeze + MMF_Zoom | 全屏震动,Freeze 0.3s |
|
||||
| `Boss_Death` | MMF_CameraShake + MMF_AudioPlay + MMF_Freeze + MMF_Particles + MMF_ScreenFade | 史诗级演出,1.0s |
|
||||
| `Spell_Cast` | MMF_Particles + MMF_AudioPlay | 灵魂粒子,施法音效 |
|
||||
| `Ability_Unlock` | MMF_ScreenFlash + MMF_AudioPlay + MMF_Freeze + MMF_UIAnim | 全屏白色闪光,0.35s Freeze |
|
||||
|
||||
---
|
||||
|
||||
## 12. 调优工作流 SOP
|
||||
|
||||
### 加入新攻击时的手感清单
|
||||
|
||||
```
|
||||
□ 1. 攻击动画三段清晰(前摇/作用/收手)
|
||||
□ 2. AnimationEventConfigSO 中设置 EnableHitBox / DisableHitBox 帧
|
||||
□ 3. 设置 EnableCancelWindow 帧(若该攻击可取消)
|
||||
□ 4. 为命中创建 MMF_Player 预设(轻/中/重选择)
|
||||
□ 5. 添加 HitstopConfigSO 条目(对应击中类型)
|
||||
□ 6. 配置击退向量(KnockbackWeight)
|
||||
□ 7. 在 Damage Simulator 中测试(见 09_EditorExtensions.md §8)
|
||||
□ 8. 实际游玩 15 次以上,感受节奏
|
||||
```
|
||||
|
||||
### 调优迭代建议
|
||||
|
||||
1. **先调 Hitstop**:哪怕 0.01s 的差异都能感知,先到位
|
||||
2. **再调音效**:使用 -3dB 和 0dB 对比,选择更有力的
|
||||
3. **最后调震动**:震动要配合音效节拍,不要只是随机添加
|
||||
4. **对比参考**:在屏幕右侧开一个《丝之歌》Demo 视频,反复对比攻击节奏
|
||||
|
||||
### 关键数字不要随意更改的原因
|
||||
|
||||
- **Coyote Time 0.15s**:低于 0.1s 玩家感觉不到(失去意义),高于 0.2s 感觉像 Bug
|
||||
- **弹反窗口 0.28s**:经过大量玩家测试的最优平衡点(太短 = 无法使用,太长 = 无技术含量)
|
||||
- **地面减速 120 > 地面加速 80**:停下要比启动快,避免"冰面感"
|
||||
- **Hitstop 用 TimeScale 不用暂停 Time**:配合 `Animancer.Speed` 一起设为 0,物理不受影响
|
||||
Reference in New Issue
Block a user