总览
复杂相机系统最怕主 Rig 里塞满临时效果。受击抖动、冲刺 FOV、低血量后处理、环境压迫感、Boss 登场震动,这些都应该做成可叠加效果,而不是污染 Follow Rig。
架构分析
主 Rig 决定“相机应该在哪里”,Modifier 决定“在此基础上加什么效果”。Global 层适合会影响构图语义的变化,Visual 层适合最后一层纯表现。Service 负责这些临时效果的生命周期,避免每个 gameplay 组件都直接改相机节点。
四层用法
| 层 | 适合放什么 | 示例 |
|---|---|---|
| Base | 长期基础镜头 | 默认角色跟随 |
| Main | 当前状态镜头 | Aim、LockOn、Dialogue |
| Global | 影响整体镜头语义的叠加 | SprintFOV、LowHealthPushIn |
| Visual | 纯视觉效果 | HitShake、ExplosionShake、DamagePP |
UGameplayCameraComponentBase 和 AGameplayCamerasPlayerCameraManager 都提供 StartGlobalCameraModifierRig、StartVisualCameraModifierRig、StopCameraModifierRig。这让你可以在 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 改了输入:叠加层尽量不控制玩家输入。
源码依据
UGameplayCameraComponentBase 和 AGameplayCamerasPlayerCameraManager 都暴露 Camera Rig Modifier、Camera Shake 和 Action 相关函数;FCameraParameterSetterService 管理变量 Setter 的添加、停止、更新和应用;默认 Root Node 包含 Base、Main、Global、Visual 四层 Blend Stack。
源码路径索引
GameplayCameras/Public/Core/CameraShakeAsset.hGameplayCameras/Public/GameFramework/GameplayCameraComponentBase.hGameplayCameras/Public/GameFramework/GameplayCamerasPlayerCameraManager.hGameplayCameras/Public/Services/CameraParameterSetterService.h