Files
zeling_v2/Docs/Design/23_GameFeelTuningGuide.md
2026-05-08 11:04:00 +08:00

14 KiB
Raw Permalink Blame History

23 · 游戏手感调优指南Game Feel Tuning Guide

所属文档集 ← 返回索引 · 总览
适用人员 策划 / 程序员 / 动画师
相关系统 BaseGames.Combat · BaseGames.Feedback · BaseGames.Player · Feel/MMFeedbacks


目录

  1. 设计理念
  2. 玩家移动参数
  3. 跳跃手感参数
  4. 输入缓冲时长
  5. 战斗打击感参数
  6. 弹反系统参数
  7. 受伤 / 死亡反馈
  8. BOSS 战手感规范
  9. 镜头与屏幕震动配置表
  10. 音效音量平衡
  11. Feel MMF_Player 预设速查表
  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

[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 + 15BOSS 硬直 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 dB0.5s 渐变BOSS BGM 淡入
  • BOSS 死亡 → BOSS BGM 淡出1.0s)→ 区域 BGM 淡入0.8s
  • 弹反成功音效播放时 → 其他 SFX 临时降至 -6 dB0.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物理不受影响