UE5.8 Gameplay Cameras 专题系列

UE5.8 Gameplay Cameras 专题(二):第一台可运行相机,从资产到画面

一步一步启用插件、创建 Camera Rig Prefab 和 Camera Asset、添加节点、挂 GameplayCameraComponent,并用 C++/蓝图激活相机。

总览

第一台相机不要做复杂。目标只有一个:让角色视角从 Gameplay Cameras 跑出来。只要这个闭环通了,后面再加 BoomArm、输入、碰撞、状态切换都不难。

UE5.8 Gameplay Cameras 专题(二):第一台可运行相机,从资产到画面 配图
第一台相机只做最小闭环:资产、Rig、组件、激活、输出。

编辑器步骤

  1. 确认插件启用:Gameplay Cameras 默认启用,但它是 Experimental,项目里最好写入插件启用记录。
  2. 在 Content Browser 新建 Camera Rig Prefab,命名 CR_ThirdPerson_Follow
  3. 打开 Rig,先放一个简单节点链:Attach 或 AttachToPlayerPawn,接 BoomArm,再接 FieldOfView。没有输入也可以先用 PlayerController ViewRotation。
  4. 新建 Camera Asset,命名 CA_PlayerCamera
  5. 在 Camera Asset 里使用 SingleCameraDirector,把它的 CameraRig 指向 CR_ThirdPerson_Follow
  6. 在角色 Pawn 或专用 Camera Actor 上添加 UGameplayCameraComponent,把 CameraReference 指向 CA_PlayerCamera
  7. 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 ControllerbSetAsViewTarget 保持 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 状态。

源码依据

UCameraAssetFactoryUCameraRigAssetFactory 提供编辑器资产创建;USingleCameraDirector 只有一个 CameraRig 属性,适合第一台相机;UGameplayCameraComponent 暴露 FCameraAssetReference CameraReference,并在更新上下文时应用参数覆盖。

源码路径索引

  • GameplayCamerasEditor/Private/AssetTools/AssetDefinition_CameraAsset.cpp
  • GameplayCamerasEditor/Private/AssetTools/AssetDefinition_CameraRigAsset.cpp
  • GameplayCameras/Public/GameFramework/GameplayCameraComponent.h
  • GameplayCameras/Public/Directors/SingleCameraDirector.h