Creating animation cycles for NPCs in VR games
NPC in VR within player's personal space. Distance to character for dialogue – 1–2 meters. Every animation artifact visible: foot sliding during walk, arms penetrating body, frozen stare, mechanically looped idle pose. Regular third-person game lets player view from 5–7 meters and some defects simply invisible. In VR, distances don't exist.
Problems with standard Mocap cycles in VR
Mocap libraries (Mixamo, Rokoko, Adobe Animate) provide quality base, but practically always require VR-specific refinement.
Foot sliding. Motion capture subject moves through space with actor. When animation loops, root motion zeroes, feet continue moving as if character going somewhere. VR player stands nearby and sees NPC "skating" in place. Solution – Root Motion Correction: manually align foot Z-position in Blender Timeline at key contact phases, or use Foot IK in Unity Animation Rigging with TwoBoneIK and ground detection.
Cycle without secondary motion. Idle animation simply swaying torso – this MannekenPis. Living character in VR must have: breathing (0.3–0.5 Hz frequency, small shoulder and chest movement), weight shifts (light pelvis displacement every 2–4 seconds), blink animation (4–8 times per minute, random interval). Without this NPC in VR feels like corpse.
Transitions between cycles. Unity Animator Blend Tree crossfade works for regular games. In VR on transition Idle → Walk → Run, if transition state Length mismatches cycle phase, leg "jumps." Needed Synchronized Layers and Avatar Mask for upper body so gestures overlay only torso and arms, not legs.
How animation cycle builds for VR NPC
Idle – base cycle, 3–6 seconds, seamless loop. Includes breathing, weight, blink. If NPC with dialogue – additionally 2–3 micro-idle variants with different character (nervous, relaxed, attentive).
Locomotion set. For grounded NPC: stop (0 m/s), slow walk, normal walk, run – minimal set. For each speed – cycle with correct leg phase (cycle start = left foot contact). In Blend Tree parameter Speed interpolates between them. Important: all set cycles should have equal length in seconds or be multiples – otherwise transition leg bounces.
Interaction animations. NPC in VR should react to player presence: look-at via Constraint Look At or procedural LookAt() in Update, greeting gesture, backing away if approached too close. Short animations (0.5–2 seconds), with explicit in/out keyframes for smooth entry from Idle.
One-time events. For dialogue NPCs – gesture set for lines (nod, head shake, point, shrug). Exported as separate Animation Clips, triggered from dialogue system via Animator.SetTrigger().
Technical export requirements
Export from Maya/Blender to FBX with Bake Animation enabled. In Unity: Animation Type = Humanoid (if rig Mecanim-compatible), Apply Root Motion = disabled for Navmesh NPC, Loop Time and Loop Pose enabled for cycles.
| Animation set | Estimated timeline |
|---|---|
| Idle + breathing + blink | 1–2 business days |
| Full locomotion set (4 speeds) | 3–5 business days |
| Dialogue gesture set (5–8 animations) | 2–4 business days |
| Full NPC animation package | 1–2 weeks |
Cost calculated individually after studying technical requirements and character skeletal structure.





