UE5.8 Gameplay Cameras 专题系列

UE5.8 Gameplay Cameras 专题(七):第三人称跟随相机实战,替代一部分 SpringArm

用内置节点搭一套第三人称跟随 Rig:Attach、BoomArm、InputAxisBinding2D、AutoRotate、Dampen、CollisionPush、FOV 和后处理。

总览

这一篇直接做一个常见第三人称 Rig。目标不是炫技,而是把 SpringArm 常见能力拆成清晰节点:跟随谁、绕哪里转、输入怎么来、怎么平滑、怎么防穿墙、FOV 怎么调。

UE5.8 Gameplay Cameras 专题(七):第三人称跟随相机实战,替代一部分 SpringArm 配图
第三人称 Rig 的目标是稳定、可调、可调试,而不是一上来追求复杂。

推荐节点链

CR_ThirdPerson_Follow
  AttachToPlayerPawn
  BoomArm
    InputAxisBinding2D
      AutoRotateInput2D
  DampenPosition
  DampenRotation
  CollisionPush
  FieldOfView
  PostProcess

BoomArmInputSlot 可以接 InputAxisBinding2D。如果没接,它会使用 PlayerController 的 ViewRotation。这个特性适合第一版测试;项目正式版建议显式接 Enhanced Input 的 Look Action。

架构分析

这个 Rig 的职责是生成“普通移动时的稳定镜头”。Attach 决定参考系,BoomArm 决定相机围绕支点的方向和距离,Dampen 消除角色运动尖峰,CollisionPush 处理环境遮挡,FOV/PostProcess 只做最后的视觉参数。每个节点只解决一个问题,调试时就能逐个关闭。

参数建议

参数 初始值建议 说明
BoomOffset X=0, Y=60, Z=70 右肩第三人称
ArmLength 250-450 根据角色体型调
ForwardDamping 0.08-0.18 急停时减少晃动
LateralDamping 0.06-0.15 横移别拖太久
CollisionSphereRadius 8-14 防止镜头穿墙
FOV 80-95 TPS 常见范围

使用案例

探索状态用正常臂长和 FOV;冲刺时启动 Global Modifier,把 FOV 提高 5-10 度,BoomOffset 稍微拉后;进入室内区域时通过 ParameterSetter 缩短臂长;进入瞄准状态时切到 Aim Rig 或覆盖肩位和 FOV。

CollisionPush 怎么调

UCollisionPushCameraNode 默认安全位置可以取 Pivot 或 Pawn。它使用 Sphere 进行碰撞检测,命中后把镜头推向安全位置。bRunAsyncCollision 可以异步跑碰撞,性能更好但会晚一帧,近距离高速移动时要观察是否可接受。

调试顺序:先关 Dampen,只看 Collision 是否正确;再开 Dampen;最后加输入和自动回正。否则你看到的“穿墙”可能其实是阻尼把镜头拖过去了。

输入和自动回正

InputAxisBinding2D 把 Raw Input 和 Accumulator 合在一起。AutoRotateInput2D 可以在玩家停下输入后按 Facing、Movement、MovementOrFacing 或 Zero 方向回正。手柄游戏建议 WaitTime 稍长,鼠标游戏建议更保守,避免玩家觉得相机抢控制。

项目落地

把 Follow Rig 做成项目模板。每个角色先继承默认参数,只覆盖高度、肩位、臂长和 FOV。不要为每个角色复制一整套节点树,否则后期改碰撞策略会非常痛苦。

常见坑

  • Dampen 太大:镜头像拖在橡皮筋上,战斗读输入会慢。
  • Collision Sphere 太小:墙角穿帮;太大:狭窄空间一直顶到角色背后。
  • 自动回正太积极:玩家停止输入就被抢方向。
  • 在 Follow Rig 里硬写 Aim 逻辑:Aim 应该是参数覆盖或独立 Rig。
  • 忘记先做无阻尼调试:多种平滑叠在一起很难判断问题来源。

源码依据

UBoomArmCameraNode 暴露 BoomOffset、BoomLengthInterpolator、InputSlot 和 AdditiveRotation;UDampenPositionCameraNode 按 Forward/Lateral/Vertical 三轴阻尼;UCollisionPushCameraNode 提供 SafePosition、CustomSafePosition、CollisionSphereRadius、CollisionChannel、Push/PullInterpolator 和异步碰撞选项。

源码路径索引

  • GameplayCameras/Public/Nodes/Common/BoomArmCameraNode.h
  • GameplayCameras/Public/Nodes/Common/DampenPositionCameraNode.h
  • GameplayCameras/Public/Nodes/Collision/CollisionPushCameraNode.h
  • GameplayCameras/Public/Nodes/Input/InputAxisBinding2DCameraNode.h