How-To: Set Up a First-Person Camera
Goal: put the view at the pawn's eye, looking exactly where the player is looking - no boom, no offset curve, no penetration avoidance (the camera is already inside the pawn's own collision).
UCrimsonCameraComponent on your pawn and ACrimsonPlayerCameraManager on your controller.1. Create a first-person mode
Make a Blueprint subclass of UCrimsonCameraMode_FirstPerson. It drives the view straight from the control rotation, clamped by the base ViewPitchMin / ViewPitchMax. Its FieldOfView defaults to 90 rather than the plugin-wide 80, because the same number reads narrower in first person.
Eye Socket Name, Eye Offset, and Hide Owner Mesh While Active.2. Place the eye
The eye comes from a mesh socket when Eye Socket Name is set, and from the pawn's view pivot otherwise. Both are then nudged by Eye Offset, which is in view space - X forward, Y right, Z up - so a forward nudge stays forward however the player is looking.
| Setting | Effect |
|---|---|
Eye Socket Name = a bone/socket (e.g. head) | The eye rides the animated skeleton, so you get head movement from the animation for free. Resolved against the Character's mesh, else the first skeletal mesh on the target actor. |
Eye Socket Name = None (default) | The eye sits at the pawn's view pivot - the eye height its capsule and BaseEyeHeight describe. Steadier: no bob from the walk cycle. |
Eye Offset | View-space nudge. A small +X pushes the camera out past the face so it does not clip; a negative Z drops the eye when the socket sits high on the skull. |
Eye Socket Name does not exist on the mesh the mode falls back to the view pivot and logs one warning to LogCrimsonCamera (once per mode instance, not once per frame). Check the Output Log if the eye is not where you expect.Get Eye Location is a BlueprintNativeEvent. Override it to drive the eye from a dedicated first-person mesh, a vehicle seat, or a camera bone on the equipped weapon.3. Hide the body (optional)
Tick Hide Owner Mesh While Active and the mode hides the pawn's mesh from the owning player when it activates, restoring it on deactivation. It is owner-only - every other client still sees the body, so this costs you nothing in multiplayer.
bOwnerNoSee and deactivation puts that value back, so a project that already hides the body is not un-hidden when the player leaves first person. Leave the option off if you manage a separate first-person arms mesh yourself - the camera has no business touching your rendering in that case.4. Body rotation is already handled
Nothing to configure. This mode ships with Declared Pawn Facing (in the Facing category) already set to FaceControlRotation, so the body turns with the view and strafing steps sideways instead of rotating the pawn. It is the only shipped mode that declares a facing - there is no first-person game where the body should orient to its velocity independently of the view, so leaving it as 'no opinion' would only look right when the project default happened to agree.
Unchanged, so CrimsonCamera writes no movement flag until you opt in. The moment any source has an opinion, UCrimsonCameraComponent becomes the sole owner of bUseControllerRotationYaw / bOrientRotationToMovement / bUseControllerDesiredRotation - which means ticking bUseControllerRotationYaw on your Character Blueprint will not work, the component overwrites it. A mode's declaration is priority 50 and UCrimsonCameraSettings::DefaultPawnFacing sits below it, so a project set to OrientToMovement still gets a correctly-turning body in first person and orient-to-movement everywhere else. Set this mode back to Unchanged if you want the project default to decide. See How-To: Face the Lock-On Target for the full resolution order.5. Push it
Activate it like any mode - push it on BeginPlay for a first-person game, or push it as a tag-keyed override to drop into first person for a section (a scope, a ladder, a cutscene).
bSyncControlRotation = false because they own their view rotation. The camera component resolves that flag from whichever mode is active every frame rather than latching it, so this mode's default of true takes effect the moment it is pushed - no mode ever has to undo another mode's choice.See also
- How-To: Switch Camera Modes - swap between first-person and third-person at runtime.
- How-To: Face the Lock-On Target - the full pawn-facing resolution order.
- Concept: The Mode Stack - how this mode blends in over its Blend Time.