animator
Since 0.6Changed in 0.7
Use it in a scene entity's components list as { "type": "animator", … }. The contract writes the fields flat and refuses unknown keys.
Fields
| Field | Type | Required | Default | Allowed values | Description |
|---|---|---|---|---|---|
asset | string | yes | |||
states | AnimState[] | yes | |||
initial | string | yes | |||
parameters | AnimParam[] | no | |||
events | AnimEvent[] | no | |||
ik | AnimIk[] | no | |||
pelvis | AnimPelvis | no | |||
lookAt | AnimLookAt | no | |||
retarget | AnimRetarget | no | |||
layers | AnimLayer[] | no | Extra playback layers over the animator's state machine, applied in order after it and before IK and look-at: an upper-body action over a locomotion blend, an additive lean. Names unique (animator-layer-invalid). See AnimLayer. | ||
rootMotionFrom | string | no | Take root motion (rootMotion and rootYaw states) from this joint instead of the rig's root: a canonical name (Hips, resolved through retarget.map) or one of the rig's own. For clips whose travel lives in the hips while the root bone stays at rest, such as a third-party mannequin pack retargeted onto the canonical rig. That joint's ground travel (and heading, with rootYaw) is moved out of the pose and onto the character, so the body stays over its capsule; its height stays in the pose. Base layer only. Absent, the root is used and nothing changes. A name the rig does not have is reported once at load (animator-root-motion-joint-missing) and the root is used. | ||
feet | string[] | no | The rig's feet, by joint name: the joints that plant on the ground, for the playtester's foot-slide check (GET /feel's feet). Absent, the engine picks the leaf joints nearest the ground contact in the bind pose. Two to four distinct, non-empty names (animator-feet-invalid); a name the rig does not have is reported on GET /feel. |
Rules that can refuse it
animator-blend-parametersanimator-clip-missinganimator-damp-invalidanimator-event-invalidanimator-feet-invalidanimator-ik-unknownanimator-initial-undefinedanimator-invalidanimator-layer-bone-unknownanimator-layer-invalidanimator-layer-unknownanimator-look-at-missinganimator-loop-range-invalidanimator-loop-seamanimator-morph-unknownanimator-not-finiteanimator-param-unknownanimator-play-unknownanimator-root-motion-hipsanimator-root-motion-joint-missinganimator-root-motion-sourceanimator-speed-invalidanimator-state-duplicateanimator-state-sourceanimator-stride-rateanimator-transition-undefinedanimator-transition-unheardanimator-unknownanimator-window-unreachableattach-owner-no-animatorattach-skeleton-missingcharacter-unanimatedface-invalidfeel/action-window-unreachablefeel/anim-bind-posefeel/anim-frozenfeel/anim-loop-seamfeel/anim-no-air-statefeel/anim-no-handlefeel/anim-popfeel/anim-run-in-placefeel/anim-slow-responsefeel/anim-stuckfeel/anim-unknown-namefeel/response-deadfeel/response-slowlipsync-invalidnull-handlespring-bone-unknownspring-needs-animator
Example
From the contract's tested fixture fixtures/contract/full20/scene.json#worker.
{
"type": "animator",
"asset": "worker",
"initial": "idle",
"states": [
{
"name": "idle",
"clip": "Idle",
"loop": true,
"transitions": [
{
"to": "walk",
"on": "moving",
"blend": 0.2
}
]
},
{
"name": "walk",
"clip": "Walk",
"loop": true,
"transitions": [
{
"to": "idle",
"on": "idle",
"blend": 0.2
},
{
"to": "run",
"on": "sprint",
"blend": 0.15
}
]
},
{
"name": "run",
"clip": "Run",
"loop": true,
"transitions": [
{
"to": "walk",
"on": "moving",
"blend": 0.25
}
]
}
]
}