UE5.8 Gameplay Cameras 专题系列

UE5.8 Gameplay Cameras 专题(八):战斗、锁定、对话相机,多个 Rig 怎么协作

用一个角色案例串起探索、瞄准、锁定、对话、处决和载具相机,讲 Rig 拆分、Director 决策、GameplayTag 和 CameraRigProxy。

总览

真实项目不会只有一个 Follow Rig。角色通常至少有探索、瞄准、锁定、对话、处决、载具几类相机。Gameplay Cameras 的正确打开方式,是把这些做成多个小 Rig,再让 Director 决定当前运行谁。

UE5.8 Gameplay Cameras 专题(八):战斗、锁定、对话相机,多个 Rig 怎么协作 配图
复杂角色相机的关键不是一个巨大 Rig,而是多个小 Rig 的清晰协作。

架构分析

多 Rig 协作的重点是边界:Gameplay 系统提供状态和目标,Director 选择镜头,Rig 负责构图,Transition 负责过渡。这样锁定系统换算法时不需要改镜头节点,镜头美术调肩位时也不会影响战斗判定。

Rig 拆分建议

Rig 职责 不该做的事
CR_Explore_Follow 普通移动跟随 不处理锁定目标
CR_Combat_Aim 瞄准肩位、窄 FOV 不决定能否开火
CR_Combat_LockOn 保持目标构图 不选择目标
CR_Dialogue_OTS 对话过肩镜头 不管理对话流程
CR_Execution_Cinematic 处决短镜头 不修改角色动画
CR_Vehicle_Chase 载具追尾相机 不复用角色输入曲线

相机 Rig 只消费 gameplay 状态,不拥有 gameplay 状态。锁定目标由战斗/锁定组件选,相机只负责把目标拍好。

使用案例

例如玩家从探索进入战斗:战斗组件设置 bInCombat,Director 进入 Combat/Aim,Aim Rig 收窄 FOV 并偏右肩;玩家锁定敌人后,锁定组件写入目标 Actor,Director 进入 LockOn,LockOn Rig 用目标位置做构图;目标死亡时清空目标,Director 回到 Aim 或 Explore。

StateTree 决策示例

CameraDirectorStateTree
  Exploration
    Condition: !bInCombat && !bInDialogue
    Task: Activate CR_Explore_Follow
  Combat
    Aim
      Condition: bIsAiming && !HasLockTarget
      Task: Activate CR_Combat_Aim
    LockOn
      Condition: HasLockTarget
      Task: Activate CR_Combat_LockOn
  Dialogue
    Condition: bInDialogue
    Task: Activate CR_Dialogue_OTS
  Vehicle
    Condition: bInVehicle
    Task: Activate CR_Vehicle_Chase

CameraRigProxy 的用法

如果多个角色共用同一套 Director StateTree,但具体 Rig 不同,就用 Proxy。StateTree 里激活 Proxy_CombatAim,每个 Camera Asset 再把它映射到自己的 CR_Hero_AimCR_Boss_AimCR_Vehicle_Aim。这样决策逻辑复用,镜头资产可差异化。

Transition 设计

探索到瞄准:短 Blend,保留 PreviousYawPitch。瞄准到锁定:中等 Blend,尽量保持目标方向。锁定到探索:不要立即回正,给玩家半秒恢复控制。进入对话:较长 Blend,可冻结上一批 Rig。处决:通常使用更强的 CameraCut 或专用 cinematic Rig。

项目落地

为角色写一张相机状态矩阵:行是 gameplay 状态,列是相机 Rig、Transition、输入策略、参数覆盖和回退 Rig。团队评审时看矩阵,不要直接打开复杂资产讨论。

状态 Rig 输入 Transition
Explore Follow 玩家控制 + 自动回正 默认
Aim Combat_Aim 玩家控制,低灵敏度 Smooth 0.15
LockOn Combat_LockOn 玩家切目标 PreviousAbsoluteTarget
Dialogue Dialogue_OTS 冻结或弱控制 Smooth 0.4

常见坑

  • 相机自己判断战斗状态:职责错位,和 Gameplay 逻辑迟早打架。
  • 一个 StateTree 同时管角色行为和相机:可以通信,但不建议混在一个资产里。
  • 忘记回退状态:目标死亡、对话取消、载具销毁时必须回到稳定 Rig。
  • 处决镜头没有失败路径:动画中断时要安全返回上一相机。
  • 用 Tag 但没有命名规范:建议 Camera.State.*Camera.Rig.*Camera.Modifier.* 分层。

源码依据

UCameraRigAsset 实现 IGameplayTagAssetInterface 并持有 GameplayTags;FGameplayCamerasActivateCameraRigViaProxyTask 支持通过 CameraRigProxy 激活具体 Rig;GameplayTagTransitionConditions 提供基于 GameplayTag 的 Transition 条件。

源码路径索引

  • GameplayCameras/Public/Directors/StateTreeCameraDirector.h
  • GameplayCameras/Public/Directors/StateTreeCameraDirectorTasks.h
  • GameplayCameras/Public/Core/CameraRigAsset.h
  • GameplayCameras/Public/Transitions/GameplayTagTransitionConditions.h