3.4 镜头反馈:震屏、顿帧、FOV、后处理

核心结论

镜头是玩家的"眼睛",而镜头反馈是打击感的放大器:同样的命中,加 40ms 顿帧 + 小幅震屏后,玩家感知到的"力量"翻倍。这四件套是动作游戏的标配,几乎没有成本,全是时间学。

四件套与我的参数

手段 作用 我的常用值 触发
顿帧(Hit Stop) 命中瞬间时间停滞 40~80ms(重击 120ms) 命中瞬间
震屏(Camera Shake) 物理冲击感 小幅 0.3~0.5,重击 1.0 命中/受击
FOV 变化 速度与冲击 冲刺+10,大招+15 缓回 状态切换
后处理闪屏 命中高光 命中瞬间 PP 冲击 50~100ms T1 命中

核心纪律:所有镜头反馈都要"快进快出"——120ms 内完成冲击与回稳。拖泥带水的反馈是晕 3D 的来源。

顿帧(Hit Stop)实现

最容易被误解的一个:顿帧不是"暂停帧",而是"短暂减速世界"。我的做法:

命中瞬间:
  设置 TimeDilation = 0.05(不是 0,0 会卡断播放)
  40ms 后恢复正常

注意:顿帧要作用于"世界"而不是玩家——玩家输入与动画可以正常走(只是速度慢),否则手感"卡"。实测 40ms 的世界级顿帧,玩家感受到的是"沉甸甸的命中"。

顿帧时长表(我的经验)

攻击类型 顿帧 震屏
普攻轻击 0 0
普攻重击 40ms 0.3
蓄力满级 80ms 0.5
大招/处决 120ms 1.0 + 特写镜头

震屏的工程化

  • 不用 Animation 的 Camera Shake 资产(UE5 推荐 UCameraShake 资产化)。
  • 数据表化:DT_ShakeSet 按(攻击类型)配 Shake 资产与 Scale。
  • 上限:单次 Shake 总时长 <= 300ms;避免叠加(同类型的 Shake 在播就 Reset 而不是再开一个)。

FOV 与镜头距离

状态 FOV 镜头距离
走 90 标准
冲刺 100 稍拉远
大招 75(先完再回) 推近
受击 85 + 前倾 -

用 Camera Shake 或 CameraOffset 的曲线做平滑过渡,不要瞬切。FOV 的 200ms 过渡是"电影感"的来源。

后处理"命中闪屏"

做法是在玩家相机上挂一个 PP Volume(低优先级),命中瞬间把某个 PP 参数(如 Color Saturation 或 Bloom Intensity)推起来 50~100ms:

  • 受击:红色 Vignette 短闪(提示玩家"被打了",对低血量阅读差的玩家特别有用)。
  • 命中:Bloom 提一档。

性能友好:用 PP 的 Intensity 控制而不是开关 Volume(开关 Volume 有引用切换开销)。

常见坑与解法

坑 1:顿帧把联机卡崩

原因:TimeDilation 影响网络 tick 速率与复制。

解法:顿帧只作用本地表现层:把 TimeDilation 应用到玩家的动画与特效,而不是 UWorld 的全局。或者联机版减少顿帧时长(<60ms)。

坑 2:震屏把玩家晃晕

原因:频率高(连击每刀都震)+ 幅度大。

解法:连击中震屏递减(第 3 刀降到 0.2);提供"减少镜头晃动"辅助选项(现代游戏标配)。

坑 3:FOV 变化导致晕 3D

解法:FOV 过渡用 easy 曲线,幅度控制在 +/-10 内;动态视野别太激进。

坑 4:大招特写把玩家"晕出战斗"

解法:处决/大招特写总时长 <= 1.5s,且可被受伤/移动打断。

相关节点速查

  • 震屏:CameraShake 资产 + StartCameraShake
  • 时间停滞:SetGlobalTimeDilation(注意联机)
  • 后处理:PostProcessVolume 的参数动画

心得:我们项目在 A/B 测里做了"有无顿帧"两个版本——有顿帧版本的"打击感"评分高一倍,而实现只用了两小时。反馈层的性价比就是这样:一些时间学规则,胜过一堆美术资源。