CrimsonCamera · Lesson 2 of 6

Your First Camera

Beginner6 minSetupBlueprints

Before you start

  • Completed: How CrimsonCamera Works
  • An Unreal Engine 5.8+ project with a Pawn/Character and a PlayerController
Video coming soon

Chapters

1. Enable the plugin

Open Edit → Plugins, type Crimson, tick CrimsonCamera (and CrimsonCommon, its dependency), and restart the editor. The editor also enables the Gameplay Targeting System dependency. For a Blueprint project that's the whole install — you never hand-edit the .uproject or a .Build.cs.

C++ projects: add the module to your build file:

csharp
// YourGame.Build.cs
PublicDependencyModuleNames.Add("CrimsonCamera");

2. Use the Crimson camera manager

ACrimsonPlayerCameraManager routes the view through the mode stack. On your PlayerController, set Player Camera Manager Class to it (Class Defaults in Blueprint, or the constructor in C++).

cpp
AMyPlayerController::AMyPlayerController()
{
PlayerCameraManagerClass = ACrimsonPlayerCameraManager::StaticClass();
}

3. Add the camera component

UCrimsonCameraComponent lives on the Pawn / Character and owns the mode stack. Add it like any component (Blueprint: Add Component → Crimson Camera Component).

cpp
CameraComponent = CreateDefaultSubobject<UCrimsonCameraComponent>(TEXT("CameraComponent"));
CameraComponent->SetupAttachment(RootComponent);

4. Make a third-person mode

A camera mode is a class you configure once. Make a Blueprint subclass of UCrimsonCameraMode_ThirdPerson and set its pitch-driven offset curves — or just start from the defaults.

Author modes as Blueprints
Modes are usually Blueprints so designers can author the offset curves visually. You can subclass in C++ to set defaults, but the curve authoring still happens in the asset.

5. Push it

Push your mode onto the stack so it drives the view. Push Camera Mode takes the mode class and an owner tag (any gameplay tag identifying who pushed it). One push on BeginPlay is enough for a single base camera.

cpp
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
if (UCrimsonCameraComponent* Cam = UCrimsonCameraComponent::FindCameraComponent(this))
{
Cam->PushCameraMode(UMyThirdPersonMode::StaticClass(), TAG_Camera_Mode_Default);
}
}
Verify
Press Play — the camera sits behind your pawn and follows it, blending in over the mode's Blend Time. No per-frame camera code anywhere.