UE5.8 Gameplay Cameras 专题系列

UE5.8 Gameplay Cameras 专题(十):Shake、Modifier 和 Service,受击、冲刺、低血量怎么叠

讲 CameraShakeAsset、Shake 节点、Global/Visual Modifier Rig、CameraAction、CameraParameterSetterService 和四层 Blend Stack 的项目用法。

总览

复杂相机系统最怕主 Rig 里塞满临时效果。受击抖动、冲刺 FOV、低血量后处理、环境压迫感、Boss 登场震动,这些都应该做成可叠加效果,而不是污染 Follow Rig。

UE5.8 Gameplay Cameras 专题(十):Shake、Modifier 和 Service,受击、冲刺、低血量怎么叠 配图
受击、冲刺、低血量这类效果不要塞进主 Rig,放到全局或视觉层更清楚。

架构分析

主 Rig 决定“相机应该在哪里”,Modifier 决定“在此基础上加什么效果”。Global 层适合会影响构图语义的变化,Visual 层适合最后一层纯表现。Service 负责这些临时效果的生命周期,避免每个 gameplay 组件都直接改相机节点。

四层用法

适合放什么 示例
Base 长期基础镜头 默认角色跟随
Main 当前状态镜头 Aim、LockOn、Dialogue
Global 影响整体镜头语义的叠加 SprintFOV、LowHealthPushIn
Visual 纯视觉效果 HitShake、ExplosionShake、DamagePP

UGameplayCameraComponentBaseAGameplayCamerasPlayerCameraManager 都提供 StartGlobalCameraModifierRigStartVisualCameraModifierRigStopCameraModifierRig。这让你可以在 Gameplay 事件里启动效果,而不是改当前主 Rig。

Shake 使用

Gameplay Cameras 有自己的 UCameraShakeAsset 和 Shake 节点。常见做法是做几个 Shake 资产:轻攻击、重攻击、爆炸、落地、武器后坐力。运行时通过组件或 CameraManager 启动。

FCameraShakeInstanceID Id = GameplayCamera->StartCameraShakeAsset(
    HitShake,
    1.0f,
    ECameraShakePlaySpace::CameraLocal,
    FRotator::ZeroRotator);

if (GameplayCamera->IsCameraShakeAssetPlaying(Id))
{
    GameplayCamera->StopCameraShakeAsset(Id, false);
}

Modifier Rig 案例

冲刺效果不要改 Follow Rig 的 FOV。做一个 CM_SprintCamera:FieldOfView 增加 8 度,轻微拉远,PostProcess 加一点运动感。玩家开始冲刺时 StartGlobalCameraModifierRig,停止冲刺时 Stop。

低血量效果更适合 Visual 层:暗角、轻微呼吸式 FOV、屏幕边缘后处理。它不应该改变 Aim 判断,也不应该影响锁定目标。

使用案例

玩家被重击时,战斗组件启动 CS_Hit_Heavy;同时生命组件发现血量低于 30%,启动 CM_LowHealth Visual Modifier;玩家开始冲刺,移动组件启动 CM_SprintFOV Global Modifier。三个效果可以并存,但每个都有自己的停止条件和 InstanceID。

Service 和 ParameterSetter

FCameraParameterSetterService 负责管理参数 Setter,UGameplayCameraParameterSetterComponent 是更偏内容侧的入口。区域型效果、Buff 型效果、状态型效果都可以通过它加 BlendIn/BlendOut。

项目落地

给相机效果建立分级:

等级 类型 停止规则
Momentary HitShake、落地 自动结束或事件停止
State Sprint、AimBreath 状态结束 BlendOut
Zone 狭窄空间、毒雾 Overlap End BlendOut
Global Boss 登场、过场压迫 剧情系统显式停止

常见坑

  • 所有效果都放 Visual 层:FOV、目标距离这类影响玩法感知的效果更适合 Global。
  • Shake 没有 ID 管理:无法优雅停止或判断是否在播。
  • 低血量效果和受击效果叠太多:建立强度上限。
  • 参数覆盖没有 BlendOut:玩家离开区域时镜头跳变。
  • Modifier Rig 改了输入:叠加层尽量不控制玩家输入。

源码依据

UGameplayCameraComponentBaseAGameplayCamerasPlayerCameraManager 都暴露 Camera Rig Modifier、Camera Shake 和 Action 相关函数;FCameraParameterSetterService 管理变量 Setter 的添加、停止、更新和应用;默认 Root Node 包含 Base、Main、Global、Visual 四层 Blend Stack。

源码路径索引

  • GameplayCameras/Public/Core/CameraShakeAsset.h
  • GameplayCameras/Public/GameFramework/GameplayCameraComponentBase.h
  • GameplayCameras/Public/GameFramework/GameplayCamerasPlayerCameraManager.h
  • GameplayCameras/Public/Services/CameraParameterSetterService.h