CrimsonCamerav1.0Coming to FabPersonal $19.99 · Professional $39.99
Join the Discord

A mode-stacked, data-driven camera. Push and pop blendable modes for third-person, top-down, first-person and 2D side-scroller views, with hard and soft lock-on and no per-frame camera code.

Gameplay · Camera · Unreal Engine 5

Compose your camera. Don't code it every frame.

Push modular camera modes onto a blend stack and the runtime blends them by weight: third-person to top-down to first-person, with no tick-camera code. Shoulder framing, zoom, lag, recenter, shake, occlusion fade and a multi-lock-point lock-on ship in the box.

Diagram of stackable camera modes: third-person, aim and lock-on cameras on an orbit around the player, with the lock-on camera active and a blend weight of 0.64 shown mid-transition

Why CrimsonCamera

A complete, data-driven camera layer: composable modes, four perspectives out of the box, the polish games ship with, and a Souls-style lock-on.

A mode stack that blends

Push and pop UCrimsonCameraMode classes; the stack blends them by weight every frame. Third-person to aim to lock-on is a smooth transition, not a hard cut, and per-mode state survives the switch.

Four perspectives, built in

Third-person, top-down, first-person and 2D side-scroller ship ready to push, with offset curves, penetration avoidance, socket eye, deadzone framing and look-ahead included. Subclass one to tune it, or use it as-is.

Shoulder, zoom, lag & recenter

Shoulder framing and dolly zoom live on the component, so they carry across every mode you switch to. View lag and idle auto-recenter are tuned per mode, and both are off by default.

Two answers to a wall in the way

Penetration avoidance is on by default: weighted feelers pull the boom in before the view clips into geometry. Or fade instead: tagged occluders dither out through the plugin's own material and restore themselves.

Lock-on, hard and soft

A multi-lock-point hard lock on Unreal's Gameplay Targeting System, plus opt-in soft lock that tracks the screen-center-most enemy. Retune targeting by reordering tasks, with no recompile, and cycle a boss's weak points.

Local by design

Everything runs on the locally-controlled pawn and replicates nothing. The one opt-in exception is pawn facing, mirrored to the server so simulated proxies turn the same way.

A closer look

A following camera in five steps, zero tick code

Point your PlayerController at the Crimson camera manager, add the camera component to your pawn, subclass the third-person mode and push it once on BeginPlay. No spring arm, no per-frame camera logic.

Switch views by pushing modes

Push a tag-keyed override when aiming, mounting or a cutscene starts, and pop the same tag when it ends. Most-recently-pushed wins, so independent systems never clobber each other.

  • Override Determine Camera Mode to pick the base view from game state
  • Every mode carries a Camera Type Tag, so your pawn reacts without naming a camera class
  • On Camera Mode Changed fires when a mode tops the stack, not after the blend: input never waits

Souls-style lock-on, fully data-driven

Author a targeting preset and a lock-on config, drop a component on the player and a lockable one on targets, bind input. Indicators work immediately: a default widget ships, already pointed at by the project setting.

  • Several lock points per actor, so players cycle a boss's weak spots
  • Soft lock-on is the same pipeline without the takeover, with a dwell time so the pick cannot flicker
  • Get Current Lock On Target hands attacks the hard target if locked, the soft one otherwise
  • Depends only on the Targeting System, with team filtering optional and never a dependency

Walls dither out, and put themselves back

Drop a Crimson Camera Occlusion Component on the pawn and tag the geometry you want to fade. Tagged occluders dither out through the bundled fade material and restore themselves the moment they stop blocking. Nothing on the occluder is ever edited.

  • Untagged walls stay solid
  • Swap the look in one project setting, or per pawn with Fade Material Override
  • Set Occlusion Enabled and Set Occlusion Fade Strength are ready for an options menu
  • A local material effect that never touches the network

The camera declares how the pawn faces, or writes nothing at all

Set Declared Pawn Facing on a camera mode and it wins whenever that mode is on top, so a lock-on camera strafes while a top-down camera stays free. Out of the box the plugin writes no movement flag at all.

  • Gameplay pushes a higher-priority facing override and clears it after; the previous mode is restored
  • Leave every declaration Unchanged and your Character Blueprint keeps owning its rotation flags
  • Only the first-person mode ships declaring FaceControlRotation
Class Defaults of a third-person camera mode Blueprint with the Declared Pawn Facing dropdown open: Unchanged, Orient to Movement, Face Control Rotation, Face Control Rotation Smoothly. The tooltip on Unchanged reads: No opinion. Falls through to the next lower-priority source, and ultimately to the pawn's own flags.

Technical details

Engine
UE 5.8
Tested platforms
Windows
Blueprint-ready
Yes
C++ required
No
Network replicated
No
Dependencies
TargetingSystem, GameplayTags, UMG, DeveloperSettings

Frequently asked questions

Do I need C++ to use it?
No. The camera manager, component, modes, push/pop, shoulder, zoom, lag, recenter, shake, occlusion fade, pawn facing and the whole lock-on system, hard and soft, are Blueprint-accessible. The C++-only surface is small and deliberate: the UI-camera takeover (UCrimsonUICameraManagerComponent), the DetermineCameraModeDelegate selection delegate (Blueprint overrides the Determine Camera Mode event instead), and the one-frame AddFieldOfViewOffset. Any of them wraps in a single BlueprintCallable function on your own class.
Does it work in multiplayer?
Yes, and there is almost nothing to manage. Camera is a local concern: every feature runs on the locally-controlled pawn and produces only that client's view, so the mode stack, lock-on, occlusion fade and shakes have no state to replicate. Lock-on changes only the local control rotation, which already replicates as the player's view. The one exception is opt-in pawn facing, and the component handles it for you: the owning client resolves the facing, applies it, and mirrors the resolved mode to the server, which stores it for simulated proxies. Push facing overrides from a context that runs on both machines (a predicted ability does this naturally), and don't treat the camera's locked target as server-authoritative.
Does it depend on other Crimson plugins?
No. CrimsonCamera is fully standalone and owns its own types, including ECrimsonPawnFacing and FCrimsonLockOnTargetInfo. Your gameplay code reads the target with Get Current Lock On Target and pushes modes or facing on the component directly. Lock-on additionally uses Unreal's first-party Gameplay Targeting System, which enabling the plugin turns on for you; note Epic still marks that plugin Experimental. Everything except lock-on works without it.
Is the lock-on hard to set up?
No. It's data-driven, not code. You author a targeting preset (selection, then filters, then sort) and a config asset, add two components, and bind input; the indicators show up on their own. Reorder or disable tasks to change targeting with no recompile. Team filtering is a separate task shipped by CrimsonCore, so lock-on never depends on a team system: omit it, or drop in your own affiliation filter.
Can players tune the camera from an options menu?
Yes. The plugin exposes a runtime setter for each option, and your settings system supplies the values. There is a persistent field-of-view override (0 clears it back to each mode's authored FOV), an occlusion on/off plus fade strength, live lag and auto-recenter setters on the active mode, and a per-player screen-shake scale. That shake scale is worth knowing about: the Crimson camera manager installs its own shake modifier, so one slider scales every shake the player receives, including Play World Camera Shake, camera shake source components and Sequencer shake tracks, not just shakes this plugin played. What it does not ship is a settings store or an options UI; those stay yours, and FOV, shake scale and occlusion live on pawn-owned components, so re-apply them after a new pawn is possessed.
Why won't my target lock on?
Almost always a targeting preset with no selection task: filters and sorts only ever narrow a selection, so zero selected is zero candidates. Type Crimson.Camera.DevTools in the console during PIE and the inspector answers it directly: a Targets tab listing every candidate with per-filter pass/fail and its screen-center rank, a Lock-On tab showing what Get Current Lock On Target resolves to right now, a Camera tab with the active mode and blend weights, and a Preset tab that puts the hard and soft presets side by side and flags a soft preset missing its Frontal Cone filter, which is the reason soft lock latches onto enemies behind you.
What does CrimsonCore add?
CrimsonCore is the free integration layer, available through the Crimson Discord, and it compiles only with every Crimson plugin installed. With it, the lock-on target automatically becomes the Motion Warping target, gameplay abilities get nodes to push a camera mode or face the pawn for their lifetime, a team-attitude filter task joins the lock-on preset, and a camera manager applies saved player settings. Without it, wire the same public hooks yourself.

Give your game a camera that blends

Set the manager, add the component, push a mode, and you have a smooth third-person camera with no tick code. Then layer in shoulder, zoom, occlusion fade and lock-on. Start with the Quick Start or follow the course.

Pricing

CrimsonCamera is sold on Fab under Epic’s two standard licenses. Both include the full plugin, source, and updates.

Personal$19.99For individuals & teams under $100K revenueComing to Fab. Join the Discord
Professional$39.99For companies over $100K revenueComing to Fab. Join the Discord