Appearance
How to create camera curves
Use this guide to create a custom UCurveVector camera effect and apply it through Motion's camera system.
Camera curves are for camera feel: walking motion, sprint energy, impacts, lean, or authored view offsets. Native first-person arm and held-item visibility does not require a Camera Offset Curve. In non-socket camera mode, MotionCameraComponent frames the first-person upper body and attached item against the final camera view before any optional curve polish is considered.
Prerequisites
MotionCameraComponenton the characterMotionCameraEventBuson the character- Basic familiarity with Unreal's Curve Editor
Create a curve asset
- In the Content Browser, right-click and select Miscellaneous > Curve.
- Choose CurveVector.
- Name the asset for the effect, such as
Curve_HeadBoborCurve_LandingImpact.
Design the curve
Each curve channel maps to a different offset axis:
- X controls right/left location offset, or roll when used as rotation.
- Y controls forward/back location offset, or pitch when used as rotation.
- Z controls up/down location offset, or yaw when used as rotation.
Keep values small for location effects and return the curve to zero when the effect should settle cleanly.
Configure FMotionCurve
For built-in Motion effects, duplicate the profile that owns the effect and edit the FMotionCurve on that duplicated profile. For project-owned gameplay systems, create an FMotionCurve in Blueprint or C++ and set the playback fields:
Identifier: unique name used to add, pause, resume, or remove the curve.CurveAsset: theUCurveVectorasset.bShouldLoop: repeats the effect.bShouldReverse: plays backward after reaching the end.Tickrate: playback speed multiplier.Multiplier: effect intensity.FalloutSmoothness: blend-out duration when removed.bPauseAtNextZero: stops at the next zero crossing for cleaner transitions.
Profiles store the complete authored FMotionCurve value. Motion copies that value into component-owned runtime state before playback so fields such as current time and pause state do not mutate the profile asset during play.
Apply the curve
Prefer the event bus when a movement component or gameplay system owns the effect:
cpp
BroadcastCameraEffect(HeadBobCurve, EMotionCameraAction::Add);Remove the curve when the state ends:
cpp
BroadcastCameraEffect(HeadBobCurve, EMotionCameraAction::Remove);Use direct MotionCameraComponent calls only when the camera system itself owns the effect.
Test the effect
- Start PIE.
- Trigger the state that adds the curve.
- Check that the curve starts, loops or completes as intended, and returns to a neutral camera position.
- Adjust the curve keys, tangents,
Tickrate, andMultiplier.
Common patterns
- Walking head bob: looping, reversing, subtle multiplier.
- Sprint camera shake: looping, faster tickrate, stronger multiplier.
- Landing impact: one-shot, quick downward Z offset, recovery to zero.
- Jump takeoff: one-shot, short lift or pitch impulse.
- Weapon recoil: one-shot, fast tickrate, returns to zero.
Do not author a curve solely to keep native first-person arms or held items in frame. If a default Motion character loses arms or items during rapid pitch input, treat that as a first-person framing issue rather than a curve-authoring requirement.
Troubleshooting
- Curve does not play: confirm camera effects are enabled in the assigned profile and the event bus exists.
- Effect is too subtle: increase
Multiplieror curve values. - Motion is jerky: use smoother tangents in the Curve Editor.
- Curve never stops: confirm the remove action uses the same
Identifier.
Next steps
Continue with the camera reference or custom integration path.