CrimsonCamera
A mode-stacked, data-driven camera system. Instead of writing camera logic in tick functions, you push and pop modular UCrimsonCameraMode classes onto a blend stack; the stack blends them by weight so transitions between third-person, top-down, aim, lock-on, or any custom view are smooth and code-light. On top of the stack it adds shoulder framing, zoom, lag, recenter, shake, occlusion fade, and a full lock-on system.
Two ways to read this
Use the Blueprint / C++ / Both switch at the top of the window. Blueprint readers get editor screenshots; C++ readers get code; Both shows them side by side. Where something exists in only one world, the other tab says so.
What's included
| System | Key Types | Purpose |
|---|---|---|
| Mode stack | UCrimsonCameraComponent, UCrimsonCameraMode | Push / pop blendable modes; the stack blends their output by weight every frame |
| Built-in modes | UCrimsonCameraMode_ThirdPerson, UCrimsonCameraMode_TopDown | Ready-made third-person (offset curves, penetration avoidance) and top-down modes |
| Mode overrides | PushCameraMode / PopCameraMode | Gameplay-driven, tag-keyed override that wins over the per-tick selection until popped |
| Shoulder & zoom | SetShoulder / ToggleShoulder, AddZoomDistance (on UCrimsonCameraComponent) | Camera-wide over-the-shoulder framing and a clamped dolly zoom, shared by every third-person-derived mode |
| Lag, recenter & shake | bEnableCameraLag, RecenterCamera, PlayCameraShake | Optional view lag, idle / on-demand recenter, and a camera-shake passthrough |
| User settings | SetFieldOfViewOverride, SetCameraShakeScale, occlusion + lag/recenter setters | Runtime setters for a player options menu (FOV, shake intensity, occlusion, lag, recenter) - CrimsonCore wires them to CrimsonSettings on the full stack |
| Occlusion fade | UCrimsonCameraOcclusionComponent | Fades tagged geometry between the camera and the pawn by swapping it to a plugin-owned dither fade material, then restoring it (no per-object material authoring) |
| Lock-on | UCrimsonLockOnComponent, UCrimsonLockOnTargetComponent, UCrimsonCameraMode_LockOn | Data-driven, multi-lock-point target lock-on built on the Gameplay Targeting System |
| Lock-on indicators | UCrimsonLockOnIndicatorWidget, UCrimsonCameraSettings | On-screen markers over lockable targets - soft when available, hard when locked, one per lock point |
| Soft lock-on | GetCurrentLockOnTarget, FCrimsonLockOnTargetInfo, UCrimsonCameraMode_SoftLockOn | Action-combat continuous targeting (no camera takeover by default) that exposes the current target + bone for attacks; optional gentle camera assist |
| UI camera | UCrimsonUICameraManagerComponent | Lets UI seize exclusive camera control (C++ API) |
| Assist hooks | ICrimsonCameraAssistInterface | Per-actor ignore lists for penetration traces + a too-close callback |
Plugin dependencies
| Type | Name |
|---|---|
| Crimson | CrimsonCommon (logging + shared types) |
| Engine plugins | TargetingSystem (Unreal's Gameplay Targeting System - the lock-on pipeline) |
| Engine modules | Core, CoreUObject, Engine, GameplayTags, TargetingSystem, UMG, DeveloperSettings |
Lock-on uses an Experimental engine plugin
The lock-on feature is built on Unreal's first-party Gameplay Targeting System (the
TargetingSystem plugin), which is marked Experimental (it ships in Lyra). Enabling CrimsonCamera enables it for you. Everything except lock-on works without it.Where to go next
- New here? Start with Quick Start - a third-person camera following your pawn end to end.
- Need a specific task? See the How-To pages (switch modes, shoulder & zoom, lag & recenter, shake, expose camera options as user settings, occlusion fade, prevent camera clipping, top-down camera, lock-on, lock-on indicators, soft lock-on, UI camera, camera dev tools).
- Want the mental model? Read the Concept pages (mode stack, mode selection & overrides, shared shoulder & zoom state, lock-on pipeline, multiplayer).
- Looking up a signature? Jump to API Reference.