# 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,物理不受影响