相机系统
Camera System
传统相机链路是:PlayerController 持有 PlayerCameraManager,后者维护一个视图目标 (view target),通过 CalcCamera 取得相机组件或 Actor 的位置朝向,并在不同目标之间混合。实验性的 Gameplay Camera System 把相机行为做成数据资产:一个 Camera Asset 包含多个由节点网络构成的 Camera Rig、进出转换,以及决定当前使用哪个 Rig 的 Camera Director。
传统链路
- 相机组件 (Camera Component) 定义相机的全部行为和属性,可以设为透视或正交(对应 投影矩阵)。CameraActor 主要是相机组件的包装,方便直接放进关卡。(Cameras in Unreal Engine)
- CalcCamera:Actor 版本在
bFindCameraComponentWhenViewTarget为真且有相机组件时,返回第一个相机组件的视角,否则返回 Actor 自身的位置和旋转;PlayerController 版本返回所控制 Pawn 的位置加上 Controller 的控制旋转。(Cameras in Unreal Engine) - PlayerCameraManager 管理某个玩家的相机,相当于看世界的「虚拟眼球」。它可以直接计算最终的相机属性,也可以在影响相机的对象之间混合(例如从一个 CameraActor 混合到另一个);对外的主要职责是可靠地响应
GetCameraViewPoint等查询。默认维护一个视图目标;用蓝图子类定制时可以实现BlueprintUpdateCamera。(Cameras in Unreal Engine)
flowchart LR PC[PlayerController] --> PCM[PlayerCameraManager] PCM -->|"视图目标"| VT["Pawn / CameraActor"] VT -->|CalcCamera| CC[CameraComponent] PCM -->|"混合、修饰"| POV["最终视点 POV"]
图中 PlayerController 拥有相机管理器,管理器从视图目标那里通过 CalcCamera 取得视角,再经过混合得到最终视点。Controller 与 Pawn 的关系见 Gameplay 框架。
Gameplay Camera System(实验性)
它是一个通用系统,把一个或多个 Camera Rig 及其行为和转换放进数据资产,而不是像传统做法那样写在蓝图组件里;由 Gameplay Camera 组件或 Actor 读取这个资产来驱动游戏中的相机。(Gameplay Camera System Overview)
| 组成 | 作用 |
|---|---|
| Camera Asset | 包含 Camera Rig、转换和 Camera Director |
| Camera Rig | 用节点网络定义一种相机行为 |
| Camera Transitions / Shared Transitions | 每个 Rig 的进出转换;Rig 没有自己的转换时使用共享转换 |
| Camera Director | 决定当前激活哪个 Rig:蓝图 Director、Single(固定一个)或 行为树与 StateTree 中的 StateTree Director |
| Camera Variable Collection | 修改资产内部属性用的变量集合 |
(Gameplay Camera System Overview)
好处:模块化(一份资产可被多个 Actor 复用);复杂相机行为更容易做,减少蓝图脚本、对设计师更友好;不写 C++ 也能定制转换;自带 Camera Debugger。快速入门用它复刻了第三人称、第一人称和俯视三种模板相机。(Gameplay Camera System Overview、Gameplay Camera System Quick Start)
取舍
传统的 PlayerCameraManager 稳定,但复杂行为(多种相机切换、自定义混合)往往要写代码。Gameplay Camera System 把这些变成数据,但目前是实验性功能,官方提示发售时要谨慎。过场相机由 Sequencer 过场动画 的 Camera Cuts 轨道接管。
出处
- Cameras in Unreal Engine UE 5.8 文档
- Gameplay Camera System Overview UE 5.8 文档(实验性功能)
- Gameplay Camera System Quick Start UE 5.8 文档(实验性功能)