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, first-person, 2D side-scroller, 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

SystemKey TypesPurpose
Mode stackUCrimsonCameraComponent, UCrimsonCameraModePush / pop blendable modes; the stack blends their output by weight every frame
Built-in modesUCrimsonCameraMode_ThirdPerson, UCrimsonCameraMode_TopDown, UCrimsonCameraMode_FirstPerson, UCrimsonCameraMode_SideScrollerFour ready-made perspectives - third-person (offset curves, penetration avoidance), top-down, first-person (socket eye, optional owner-only mesh hide), and 2D side-scroller (fixed axis, deadzone framing, look-ahead)
Mode overridesPushCameraMode / PopCameraMode, OnCameraModeChangedGameplay-driven, tag-keyed override that wins over the per-tick selection until popped; an observer event + Get Active Camera Type Tag let the game react to the switch without subclassing modes
Shoulder & zoomSetShoulder / ToggleShoulder, AddZoomDistance (on UCrimsonCameraComponent)Camera-wide over-the-shoulder framing and a clamped dolly zoom, shared by every third-person-derived mode
Lag, recenter & shakebEnableCameraLag, RecenterCamera, PlayCameraShakeOptional view lag, idle / on-demand recenter, and a camera-shake passthrough
User settingsSetFieldOfViewOverride, SetCameraShakeScale, occlusion + lag/recenter settersRuntime setters a player options menu can call directly (FOV, shake intensity, occlusion, lag, recenter) - the plugin ships the setters, your settings system supplies the values
Occlusion fadeUCrimsonCameraOcclusionComponentFades 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-onUCrimsonLockOnComponent, UCrimsonLockOnTargetComponent, UCrimsonCameraMode_LockOnData-driven, multi-lock-point target lock-on built on the Gameplay Targeting System
Lock-on indicatorsUCrimsonLockOnIndicatorWidget, UCrimsonCameraSettingsOn-screen markers over lockable targets - soft when available, hard when locked, one per lock point
Soft lock-onGetCurrentLockOnTarget, FCrimsonLockOnTargetInfo, UCrimsonCameraMode_SoftLockOnAction-combat continuous targeting (no camera takeover by default) that exposes the current target + bone for attacks; optional gentle camera assist
UI cameraUCrimsonUICameraManagerComponentLets UI seize exclusive camera control (C++ API)
Assist hooksICrimsonCameraAssistInterfacePer-actor ignore lists for penetration traces + a too-close callback

Plugin dependencies

TypeName
Crimson pluginsNone. This plugin is fully standalone.
Engine pluginsTargetingSystem (Unreal's Gameplay Targeting System - the lock-on pipeline), SlateIM and GameplayTagsEditor (editor module: the Camera Dev Tools window)
Engine modules (runtime)Core, CoreUObject, Engine, GameplayTags, TargetingSystem, UMG, DeveloperSettings
Engine modules (editor)Core, CoreUObject, Engine, GameplayTags, TargetingSystem, UMG, SlateIM, SlateCore, Slate, ApplicationCore, ToolMenus, UnrealEd, AssetTools, Kismet, Json, AssetRegistry, GameplayTagsEditor, ContentBrowserData
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. Enabling CrimsonCamera enables it for you. Everything except lock-on works without it.
Using with other Crimson plugins
CrimsonCamera works alone. When you own other Crimson plugins, CrimsonCore contains the full-suite wiring that uses it under Source/CrimsonCore/{Public,Private}/Integration/: UCrimsonCoreAbilityCameraStatics (AbilitySystem/ - abilities pushing camera modes and reading the lock-on target) and UCrimsonCoreLockOnWarpTargetProvider (MotionWarping/ - the lock-on target as a motion-warping target). To wire it yourself, read CrimsonCommon -> Concept: Connecting Crimson Plugins; for everything CrimsonCore installs, read CrimsonCore -> Concept: The Integration Layer.

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, react to a camera mode change, shoulder & zoom, lag & recenter, shake, expose camera options as user settings, occlusion fade, prevent camera clipping, top-down camera, first-person camera, side-scroller 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.