总览
Gameplay Cameras 是 UE5.8 里一个 Experimental 的模块化、数据驱动相机系统。它不是简单地把 USpringArmComponent 包一层,也不是 UCameraComponent 的直接替代品;更准确地说,它把“相机怎么摆、什么时候切、用哪些 gameplay 数据驱动、怎么叠加全局效果、怎么调试”拆成资产、节点、Director、运行时 Evaluator 和调试工具。
一句话理解:Camera Asset 像一份总谱,Camera Rig 是一种镜头方案,Camera Node 是具体运算步骤,Camera Director 决定当前该用哪些 Rig,FCameraSystemEvaluator 每帧把它们算成最终的 FCameraPose,最后交给 PlayerCameraManager 或组件输出视图。
源码里的核心类名可以先记住五个:UCameraAsset 管完整相机资产,UCameraRigAsset 管可复用 Rig,UCameraNode 管节点配置,FCameraSystemEvaluator 管每帧评估,AGameplayCamerasPlayerCameraManager 管玩家视图接入。
架构地图
最小运行链路是:PlayerController 或 Camera Component 激活一个评估上下文,FCameraSystemEvaluator 维护 Context Stack,Director 在当前上下文里选 Rig,Rig 的节点树逐层修改 Location、Rotation、FieldOfView、PostProcess、物理镜头参数和上下文数据。最终结果通过 GetEvaluatedCameraView 变成 FMinimalViewInfo。
PlayerController
-> AGameplayCamerasPlayerCameraManager 或 UGameplayCameraComponent
-> FCameraEvaluationContext
-> UCameraAsset + UCameraDirector
-> UCameraRigAsset
-> UCameraNode 树
-> FCameraPose / PostProcess / VariableTable / ContextDataTable
专题分篇目录
| 篇章 | 你会学到什么 | 读完能做什么 |
|---|---|---|
| 一 | 它到底是什么,和传统相机系统怎么分工 | 判断项目该不该用 |
| 二 | 第一台相机从资产创建到跑起来 | 在 Pawn 或 Camera Actor 上看到结果 |
| 三 | Evaluator、Context、Pose、PlayerCameraManager | 看懂运行时调用链 |
| 四 | Camera Asset、Rig、Node 三件套 | 能组织可复用镜头资产 |
| 五 | Director、StateTree、Transition | 能做战斗、对话、载具等切换 |
| 六 | 参数、变量、Context Data | 能把速度、锁定目标、瞄准状态喂给相机 |
| 七 | 第三人称跟随相机实战 | 能替代一部分 SpringArm 逻辑 |
| 八 | 战斗、锁定、对话案例 | 能做多个 Rig 的项目决策 |
| 九 | 输入与 Control Rotation | 能处理右摇杆、鼠标、自动回正和 Aim 保持 |
| 十 | Shake、Modifier、Service | 能做受击、冲刺、低血量等叠加效果 |
| 十一 | Sequencer、Trace、Debugger | 能排查为什么没切、为什么抖、为什么参数没变 |
| 十二 | 生产落地 | 能制定团队使用规范和迁移路线 |
什么时候该用
适合用 Gameplay Cameras 的场景:角色相机有多套状态,战斗/探索/锁定/对话/载具要频繁切换;相机参数要由 gameplay 数据驱动;你希望镜头配置更多留给内容团队,而不是堆在 PlayerCameraManager C++ 里;你需要复用 Rig、Transition 和 Debugger。
暂时不建议一上来就全量替换的场景:项目相机只有一个 SpringArm + CameraComponent;团队还没有资产命名和调试规范;对 Experimental 插件的 API 稳定性没有承受空间。更稳的做法是先把一个局部功能做成试点,例如锁定相机、处决相机或冲刺视觉层。
项目落地
我建议把它当成“相机子系统编排层”,而不是“所有相机代码的坟场”。保留简单 CameraComponent 做镜头落点和兼容,Gameplay Cameras 负责可组合的 Rig、参数暴露、切换和叠加。项目里至少建立三层资产:基础跟随 Rig、状态专用 Rig、全局 Modifier Rig;再用 Camera Asset 的 Director 管理它们。
常见坑
- 插件是 Experimental,先做可回退试点,不要直接改全项目 CameraManager。
Camera Asset和Camera Rig Prefab是不同资产,前者负责 Director 和公共接口,后者负责节点树。bRunStandaloneCameraSystem决定组件是否自己跑 Evaluator;接入AGameplayCamerasPlayerCameraManager时要想清楚谁是 Host。- 输入节点通常依赖 Enhanced Input,右摇杆/鼠标没动时先查
InputAction和PlayerController。 - 相机切换不是只靠 SetViewTarget;Gameplay Cameras 里更重要的是 Context、Director、Blend Stack 和 Transition。
源码路径索引
Engine/Plugins/Cameras/GameplayCameras/GameplayCameras.upluginGameplayCameras/Public/Core/CameraAsset.hGameplayCameras/Public/Core/CameraRigAsset.hGameplayCameras/Public/Core/CameraSystemEvaluator.hGameplayCameras/Public/GameFramework/GameplayCamerasPlayerCameraManager.h