总览
第一台相机不要做复杂。目标只有一个:让角色视角从 Gameplay Cameras 跑出来。只要这个闭环通了,后面再加 BoomArm、输入、碰撞、状态切换都不难。
编辑器步骤
- 确认插件启用:
Gameplay Cameras默认启用,但它是 Experimental,项目里最好写入插件启用记录。 - 在 Content Browser 新建
Camera Rig Prefab,命名CR_ThirdPerson_Follow。 - 打开 Rig,先放一个简单节点链:Attach 或 AttachToPlayerPawn,接 BoomArm,再接 FieldOfView。没有输入也可以先用 PlayerController ViewRotation。
- 新建
Camera Asset,命名CA_PlayerCamera。 - 在 Camera Asset 里使用
SingleCameraDirector,把它的CameraRig指向CR_ThirdPerson_Follow。 - 在角色 Pawn 或专用 Camera Actor 上添加
UGameplayCameraComponent,把CameraReference指向CA_PlayerCamera。 - BeginPlay 调用
ActivateCameraForPlayerController,让该组件成为玩家视图来源。
最小 C++ 接入
#include "GameFramework/GameplayCameraComponent.h"
AMyPlayerCharacter::AMyPlayerCharacter()
{
GameplayCamera = CreateDefaultSubobject<UGameplayCameraComponent>(TEXT("GameplayCamera"));
GameplayCamera->SetupAttachment(GetRootComponent());
GameplayCamera->bRunStandaloneCameraSystem = true;
}
void AMyPlayerCharacter::BeginPlay()
{
Super::BeginPlay();
if (APlayerController* PC = Cast<APlayerController>(GetController()))
{
GameplayCamera->ActivateCameraForPlayerController(PC, true);
}
}
蓝图做法完全等价:BeginPlay 里拿 PlayerController,调用组件上的 Activate Camera For Player Controller,bSetAsViewTarget 保持 true。
使用案例
第一台相机建议放在一个干净测试关卡:一个 PlayerStart、一个可控制角色、一个空旷地面、几堵墙。先确认视角来自 CA_PlayerCamera,再绕墙测试 CollisionPush,再按输入确认 BoomArm 旋转。这样每一步都只有一个变量,失败时不会猜半天。
架构分析
UGameplayCameraComponent 自己不直接“拍摄”。它继承自 UGameplayCameraComponentBase,组件内部会创建 FGameplayCameraComponentEvaluationContext,再根据 CameraReference 里的资产运行 Camera Asset。bRunStandaloneCameraSystem 为 true 时,组件自己托管 FCameraSystemEvaluator,并把结果写到输出用的 UCineCameraComponent。
如果你的项目已经使用自定义 PlayerCameraManager,也可以先不替换它,先让组件独立运行,确认镜头结果正确。等需要管理多个 ViewTarget、玩家旋转和全局 Modifier 时,再迁到 AGameplayCamerasPlayerCameraManager。
项目落地
建议第一版资产命名固定下来:CA_ 表示 Camera Asset,CR_ 表示 Camera Rig Prefab,CM_ 表示 Modifier Rig,CS_ 表示 Camera Shake。第一台相机只保留三四个节点,调通以后再复制出 Combat、LockOn、Dialogue。
常见坑
- 只创建了
Camera Rig Prefab,没有创建Camera Asset:组件的CameraReference要指向 Camera Asset。 - 创建了 Camera Asset,但 Director 没指向 Rig:运行时没有活动 Rig,自然没视角。
- 组件没激活或者没有 SetViewTarget:画面仍然来自旧 CameraComponent。
- Pawn 里已有 CameraComponent 干扰判断:先用专用测试关卡,减少变量。
- Rig 没 Build 或资产处于 Dirty:打开资产检查 Build 状态。
源码依据
UCameraAssetFactory 和 UCameraRigAssetFactory 提供编辑器资产创建;USingleCameraDirector 只有一个 CameraRig 属性,适合第一台相机;UGameplayCameraComponent 暴露 FCameraAssetReference CameraReference,并在更新上下文时应用参数覆盖。
源码路径索引
GameplayCamerasEditor/Private/AssetTools/AssetDefinition_CameraAsset.cppGameplayCamerasEditor/Private/AssetTools/AssetDefinition_CameraRigAsset.cppGameplayCameras/Public/GameFramework/GameplayCameraComponent.hGameplayCameras/Public/Directors/SingleCameraDirector.h