Appearance
How to add a first-person item end to end
Use this guide to add one native first-person item to Motion. You will move from imported meshes and held pose animations to finished visuals for the local player's view in PIE.
By the end, you will have:
- a valid
MotionNativeFirstPersonItemConfig - paired first-person and world item presentations
- automatic held pose animations for the movement states you choose
- optional presentation actions for finite item one-shots
- one
Motion First Person Item Upper Body Overlaynode in the host Animation Blueprint - tuned first-person and world transforms saved back to the config
Use a simple item for the first pass, such as a pistol, tablet, scanner, or tool. Add firing, reload, inspect, recoil, inventory, and gameplay rules after the basic item visuals are working.
Check the character setup
- Open the Motion character Blueprint.
- Confirm the main character mesh is the full-body
GetMesh()representation. - Confirm the character has skeletal mesh components named exactly
FirstPersonUpperBodyandFirstPersonLowerBody. - Confirm all three body meshes use the same character skeleton.
- Open the skeleton and confirm
weapon_rexists. - Confirm the full-body skeleton has
MotionCamerafor Stable presentation. If the camera profile selects Socket mode with another pivot, confirm that configured socket too. - Confirm the character has
MotionCameraComponentandMotionHeldItemComponent.
The shipped Motion character is the reference layout: one full-body mesh, optional first-person body meshes, camera, and held-item components on the same character.
If the optional first-person body meshes are not ready yet, complete How to author optional first-person body meshes and held pose animations first.
Create the item asset folder
- Create a folder for the item, such as
Content/Motion/Items/Scanner. - Add subfolders for
Meshes,Animations, andConfigs. - Put first-person assets and world assets near each other so the pair is easy to review.
This guide uses Scanner as the item name. Replace it with your item name as you work.
Import the item meshes
Motion item configs use exactly one complete presentation pair. Choose static meshes, skeletal meshes, or actor classes for the item, then stay in that family for both the local player's view and the world view.
For a static mesh item:
- Import the first-person item mesh as
SM_Scanner_FP. - Import the world item mesh as
SM_Scanner_World. - Open both meshes and confirm their pivot/origin supports attachment to
weapon_r.
For a skeletal mesh item:
- Import the first-person item mesh as
SKM_Scanner_FP. - Import the world item mesh as
SKM_Scanner_World. - Assign the correct item skeleton or imported item skeleton.
- Keep first-person and world meshes as a matching skeletal pair.
For an actor-backed item, create matching first-person and world actor classes when the item needs a component hierarchy or behavior beyond one mesh.
Do not mix static mesh, skeletal mesh, and actor presentation types. Mixed and partial pairs are rejected.
Import the held pose animations
Import or retarget held pose animations onto the character skeleton used by FirstPersonUpperBody.
Start with these assets:
| Animation | Config field or rule |
|---|---|
Anim_Scanner_HeldPose_Idle | AutomaticHeldPoseSettings.FallbackHeldPoseAnimation |
Anim_Scanner_HeldPose_Crouch | HeldPoseAnimationRules rule requiring Motion.State.Crouching |
Anim_Scanner_HeldPose_Sprint | HeldPoseAnimationRules rule requiring Motion.State.Sprinting |
Anim_Scanner_HeldPose_Jump | HeldPoseAnimationRules rule requiring Motion.State.Jumping |
The fallback can cover standing, idle, walking, and any state that does not need a special item hold. Add explicit rules only when the item should visibly change posture for that state.
Preview each clip on the character skeleton:
- The hands should hold the item consistently.
- The right hand should stay near the intended
weapon_rgrip. - The clip should loop without popping.
- The configured solve bones should exist on the held pose animation skeleton.
Create the native item config
- In the item
Configsfolder, create aMotionNativeFirstPersonItemConfigasset. - Name it
DA_NativeFPItem_Scanner. - Open the config.
- Set one complete presentation pair:
| Presentation type | Fields |
|---|---|
| Static | FirstPersonStaticMesh = SM_Scanner_FP, WorldStaticMesh = SM_Scanner_World |
| Skeletal | FirstPersonSkeletalMesh = SKM_Scanner_FP, WorldSkeletalMesh = SKM_Scanner_World |
| Actor | FirstPersonActorClass = BP_Scanner_FP, WorldActorClass = BP_Scanner_World |
- Leave
OverlayModeset toAutomatic. - Set
AutomaticHeldPoseSettings.FallbackHeldPoseAnimationtoAnim_Scanner_HeldPose_Idle. - Start with
AutomaticHeldPoseSettings.BlendTime = 0.12.
BlendTime controls both blending the automatic overlay against the host pose and crossfades when a different tag-driven held pose animation wins while the same item remains equipped.
Add movement-state held pose rules
- In
AutomaticHeldPoseSettings.HeldPoseAnimationRules, add a crouch rule. - Set
RequiredTagstoMotion.State.Crouching. - Set
BlockedTagstoMotion.State.Walkingwhen this clip is crouch-idle only. - Set
HeldPoseAnimationtoAnim_Scanner_HeldPose_Crouch. - Add a sprint rule with
RequiredTags = Motion.State.Sprinting. - Set its
HeldPoseAnimationtoAnim_Scanner_HeldPose_Sprint. - Add a crouch-walk or jump rule only if the item needs those clips.
Rules match before single-tag entries. Highest Priority wins, then the most specific matching rule, then array order.
Tune the upper-body solve
Leave UpperBodySolveSettings at the defaults for the first pass if your skeleton uses Motion's mannequin-compatible names.
Change these fields only when the animation skeleton or item grip needs it:
| Field | Use it when |
|---|---|
HeldPoseBranchRootBoneName | The held pose overlay should start from a different branch root |
HeldPoseBranchBlendDepth | The upper-body blend includes too much or too little of the body |
BoneWeights | Pitch distribution should use different bones or weights |
HandIKBones | Your skeleton does not use VB Hand_R, VB Hand_L, hand_r, and hand_l |
PitchSolveAlpha and HandIKAlpha | Pitch or hand correction feels too strong |
Motion validates configured bone names against the held pose animation skeleton. If a configured bone is missing, the automatic overlay fails closed instead of corrupting the pose.
Wire the host Animation Blueprint
- Open the character Animation Blueprint used by the full-body mesh.
- Open Class Settings.
- Confirm the parent class is
MotionAnimInstance. - Open the AnimGraph.
- Find the final locomotion/body pose before output or final skeletal controls.
- Add one
Motion First Person Item Upper Body Overlaynode. - Route the host pose into the node's
BasePose. - Route the node output to the final pose, or into your own item action layers that intentionally run after the basic held pose.
- Compile the Animation Blueprint.
Do not build a manual Sequence Player or Blend Poses by bool branch for the basic held pose. The Motion overlay node reads the active item config, selected held pose animation, blend timing, pitch, and solve settings through MotionAnimInstance.
Activate the item for testing
Use the debug path for the first pass:
- Select the
MotionHeldItemComponenton the character. - Set
DefaultDebugItemConfigtoDA_NativeFPItem_Scanner. - Start PIE.
- Use the project's debug held-item input or call the component's toggle path.
For project equipment code, call SetActiveItemConfig with DA_NativeFPItem_Scanner. The component validates the presentation pair first, then updates the holding tag, linked layer, item presentation, camera render tuning, and tuning bridge from the applied usable config. Overlay and presentation-action validation remain separate.
Tune the first-person transform in PIE
- Start PIE with the scanner equipped.
- Select the character.
- Select the generated
MotionNativeFirstPersonItemTuningcomponent. - Adjust the preview first-person transform. Transform and render tuning edits preview live without saving.
- Repeat until the item sits correctly in the owner camera.
- Run
ApplyPreviewToPresentationto apply the current transform/render preview and save all preview values back to the config.
The first-person item attaches to FirstPersonUpperBody.weapon_r. Use FirstPersonRelativeTransform for item-specific grip and screen placement. Shared Stable body clearance and presentation anchoring belong to MotionCameraComponent and its profile; item equip does not change camera placement or baseline correction. FirstPersonLowerBody remains grounded.
Tune the world transform
- In PIE, switch to a second player or external view.
- Confirm the world item attaches to
GetMesh().weapon_r. - Use the tuning component's world transform preview fields.
- Check the item from front, side, and behind as transform and render tuning edits preview live.
- Run
ApplyPreviewToPresentationto apply the current transform/render preview and save all preview values back to the config.
The world presentation is for non-owner visibility, shadows, reflections, and third-person readability. It does not need to match the first-person presentation's scale or silhouette exactly, but it should represent the same item.
Test movement-state presentation
- Equip the item while standing still.
- Confirm the fallback held pose appears immediately.
- Walk without a special walking rule and confirm fallback remains acceptable.
- Crouch and confirm the crouch held pose wins.
- Sprint and confirm the sprint held pose wins.
- Jump if you added a jump entry and confirm the jump held pose wins.
- Switch quickly between crouch and sprint.
- Confirm tag-driven changes crossfade over
BlendTime. - Unequip and confirm the overlay fades back to the host pose.
If a state does not change the item posture, first confirm that the gameplay tag is active. Use showdebug abilitysystem and the Motion animation logs when needed.
Expected owner-view composition with the item equipped:

Expected look-down composition keeps the lower body visible without pulling the item into the legs:

Expected look-up composition keeps the item in a usable owner-view position:

Expected owner-view composition in a walking pose:

Expected unequip cleanup leaves no stale item mesh:

Add optional presentation actions
Use presentation actions only after the basic held pose path works. They are for local visual one-shots on the active item, not for gameplay rules such as inventory, ammo, cooldowns, damage, or networking.
- Import or retarget a finite action sequence such as
Anim_Scanner_InspectorAnim_Scanner_Attack. - Open
DA_NativeFPItem_Scanner. - Add a
PresentationActionsentry. - Set
ActionTagto the tag your Blueprint will request, such as your ownItem.Action.Inspect. - Set
ActionAnimationto the action sequence. - Set
BlendInTime,BlendOutTime, andPlayRate. - From Blueprint, call
RequestHeldItemPresentationActiononMotionHeldItemComponent. - Branch on the immediate result:
Started,StartedAndInterruptedPrevious,Invalid, orUnsupported. - Bind
OnPresentationActionLifecyclefor completion, cancellation, interruption, invalid requests, and unsupported requests.
Motion advances presentation action playback locally and the overlay samples that playback time. Your project decides whether input is accepted, which item is active, what gameplay effect occurs, and whether any gameplay event should replicate.
Tune render values only when needed
Use RenderTuning after transforms and held pose animation are already working.
- Enable
bOverrideFirstPersonFieldOfViewonly if this item needs a different native first-person FOV. - Enable
bOverrideFirstPersonScaleonly if this item needs a different native first-person scale. - Test the upper body, lower body, and item together.
UE exposes native first-person FOV and scale through the camera, so Motion applies supported overrides to the whole first-person set.
Add a custom overlay graph only if automatic mode is not enough
Stay in automatic mode for normal held items. Use CustomGraph only when the item intentionally replaces Motion's automatic overlay and owns its held-pose blend, pitch solve, hand IK, recoil, reload, or other pose logic.
In Unreal, the custom overlay is authored as a named Animation Layer graph in the item overlay Animation Blueprint. It is still pose graph logic; Unreal exposes the named layer graph to Motion as an anim blueprint function at runtime. Do not add a second top-level AnimGraph to the host character Animation Blueprint for this path.
To create a custom overlay graph:
- Create an Animation Blueprint on the same skeleton as the first-person body.
- Open that Animation Blueprint and ensure the
My Blueprintpanel is visible. - In
My Blueprint, use the add button forAnimation Layersand chooseAnimation Layer. This creates a new named Animation Layer graph, usually with a temporary name such asNewAnimationLayer. - Rename the new Animation Layer graph to the exact value you will put in
CustomOverlaySettings.OverlayLayerGraphName, for exampleFirstPersonItemUpperBodyOverlay. - Open the renamed Animation Layer graph.
- Click the graph background so the graph
Detailspanel is shown, then useInputs>New Input Poseto add one input pose. Name itInPose. - Build the item's extra pose graph logic from that
InPose. - Do not place another
Motion First Person Item Upper Body Overlaynode inside this graph. The host overlay node invokes the custom graph; a nested Motion overlay node passes its input through to prevent recursion. - Connect the final custom pose to the graph's output pose.
- Set the item config
OverlayModetoCustomGraph. - Set
CustomOverlaySettings.OverlayLayerClassto the custom Animation Blueprint class. - Set
CustomOverlaySettings.OverlayLayerGraphNameto the Animation Layer graph name from step 4. - Compile the custom overlay Animation Blueprint, then compile and test the host Animation Blueprint again.
In CustomGraph mode, InPose is the host pose before Motion's automatic overlay. The layer must provide every pose operation it still needs.
For a pure custom held-pose override that keeps the host pose:
- Add a
Sequence Playerfor the item's held-pose animation. - Add a
Layered Blend per Bone. - Connect
InPoseto theLayered Blend per BoneBase Pose. - Connect the
Sequence PlayertoBlend Poses 0. - Set
Blend Weights 0to1.0, or to the custom alpha that should drive this item. - In
Layer Setup>Branch Filters, add the same branch Motion uses for the automatic overlay unless this item needs a different branch. The default branch is bonepelviswith blend depth4. - Enable
Mesh Space Rotation Blendon theLayered Blend per Bonenode. - Feed the blended pose into the rest of the custom logic, or directly to the output if the item does not need camera pitch, hand IK, recoil, reload, or other action composition.
Do not connect a Sequence Player directly to the layer output unless the item intentionally replaces the whole host pose. A direct sequence output ignores InPose, so the first-person body will not inherit the host pose or camera-pitch behavior.
For a pure custom graph that should rotate with camera pitch, add the pitch solve inside the layer after the held-pose or action blend:
- Read
Get Native First Person Control Rotation Pitchfrom the owningMotionAnimInstance. This is Motion overlay pitch, not raw UE controller pitch: looking down is positive and looking up is negative. On observed remote pawns, the getter uses replicated pawn aim rotation so custom graphs receive the same convention without adding their own view-pitch replication. - Multiply that value by any item-specific pitch alpha.
- Convert the blended local pose to component space with
Convert Local To Component Space. - Add one
Transform (Modify) Bonenode per pitch bone. - Set each
Transform (Modify) Bonenode toRotation Mode=Add to ExistingandRotation Space=Component Space. - For Motion's mannequin-compatible setup, set the rotation
Z/roll value toPitch * Weightfor that bone and leave the other rotation axes at0. - Convert back with
Convert Component To Local Space, then continue to the output or to more custom logic.
Motion's default pitch distribution is:
| Bone | Weight |
|---|---|
spine_01 | 0.15 |
spine_02 | 0.10 |
spine_03 | 0.10 |
spine_04 | 0.10 |
spine_05 | 0.10 |
neck_01 | 0.15 |
neck_02 | 0.20 |
head | 0.10 |
If a project skeleton uses a different pitch axis, use the matching axis for that skeleton. If the pose rotates opposite the camera, multiply the value by -1 at the transform node; do not invert Get Native First Person Control Rotation Pitch globally because it already uses Motion's overlay convention.
If a layered blend makes the weapon rotate the wrong way, check these first:
InPoseis connected toBase Pose, and the held-poseSequence Playeris connected toBlend Poses 0.Mesh Space Rotation Blendis enabled.- The branch filter root and depth match the intended affected body area, usually
pelviswith depth4. - Pitch transforms run after the held-pose blend, not before it.
- The held-pose animation was authored on the same skeleton and in the same weapon/aim convention as the first-person body.
CustomGraph mode bypasses automatic held pose resolution and the automatic upper-body solve. The fallback held pose animation, held pose rules, single-tag entries, automatic blend time, pitch solve, hand IK, and Motion presentation actions are not used for that item's overlay output.
Validate the finished item
Run this checklist before calling the item done:
- The item config has exactly one complete static mesh, skeletal mesh, or actor presentation pair.
- Automatic mode has a fallback held pose animation.
- Each held pose rule has required tags and an animation; each single-tag entry has a valid tag and animation.
- Configured solve bones exist on the held pose animation skeleton.
- Presentation action entries have valid tags, finite clips, and positive play rates.
- The host Animation Blueprint has one Motion overlay node after the host locomotion pose.
- Owner view shows the first-person upper body and first-person item.
- Look-down view shows a coherent connection between the upper- and lower-body meshes while the item remains attached to the upper body.
- Non-owner view shows the world item attached to the full-body mesh.
- Crouch, sprint, jump, and any movement tags from your project select the expected held pose assets.
- Equip, unequip, and tag changes blend without stale meshes or stale linked layers.
- Optional presentation actions start, complete or cancel, and return to the current held pose.
What you built
You added one native first-person item through Motion's item path:
MotionNativeFirstPersonItemConfigowns the presentation pair, automatic held pose set, optional presentation actions, solve tuning, transforms, optional linked layer, optional custom graph, and render tuningMotionHeldItemComponentowns runtime presentation, validates the config before applying it, and exposes the optional action request/delegate bridgeMotionAnimInstanceexposes item and action state cached for AnimGraph useMotion First Person Item Upper Body Overlayowns the basic held pose, configured presentation action composition, pitch solve, hand IK, and automatic held pose transitionsMotionCameraComponentowns native first-person render tuning, shared Stable camera clearance, and the shared bounded upper-body/item presentation correction while leavingFirstPersonLowerBodyat its authored transform
Use the same path for the next item, then add item-specific gameplay actions after the presentation is stable.
For API lookup, see MotionHeldItemComponent and First-person item API reference.