On this page
Animator Skeletal Conversion Support
Read Supported Boundaries and Unsupported Operations first. Build success does not establish support for omitted behavior or arbitrary Prefab combinations.
ECSAnimator converts a character Prefab and its Animator Controller into data for that character's skeleton/Avatar. It does not keep a Unity Animator running or retarget a built skeleton onto an arbitrary Avatar. See the conversion guide for tools and component handling, and animation integration for gameplay.
Animation features
| Authored feature | Conversion route | Requirements |
|---|---|---|
| Simple 1D | Blend adjacent motions using a Float | Finite, distinct thresholds |
| 2D Simple Directional | Directional blending | Do not place multiple motions in the same nonzero direction; use Freeform Directional |
| 2D Freeform Directional | Direction and magnitude | Distinct child positions |
| 2D Freeform Cartesian | Planar parameter blending | Distinct child positions |
| Direct | Weights from child parameters | Normalize Blend Values on/off is supported; unnormalized output is not ordinary normalized blending |
| Nested BlendTree | Recursive compilation into the same evaluator | No separate Animator runtime is introduced |
| Transitions | Conditions, Exit Time, duration, interruption, Any State and sub-state-machine routing | Authored priority is retained; invalid destinations are rejected |
| Layers | Override/Additive, weights and AvatarMask | Skeletal masks; no runtime IK from the mask |
| Sync layers | Source state/transition graph, replacement motions and Timing | Source must be an earlier non-synchronized layer |
| State settings | Parameter-driven Speed, Mirror, Cycle Offset, Motion Time and Write Defaults | Humanoid is the supported Mirror sampling route; Write Defaults Off retains unwritten-channel history |
| Generic/Humanoid | Sampling against the selected character | Humanoid requires a valid matching Avatar; no runtime retargeting |
This is the implementation's supported domain, not proof that every combination is bit-identical to Unity. Validation compares Animator state, time and bone poses, with separate numerical/pixel checks for GPU skinning. Different floating-point interpolation paths use explicit tolerances.
Explicitly omitted features
- Root Motion: no character displacement is exported. Gameplay writes LocalTransform.
- StateMachineBehaviour: callbacks are neither converted nor executed. Move parameter writes, movement and other gameplay into your systems.
- IK Pass / Foot IK: no runtime IK, terrain adaptation or target tracking. Humanoid offline retargeting inputs may already influence sampled bone poses.
These settings do not block the remaining skeletal animation. Preview lists locations/types; the conversion window and Console retain nonblocking completion diagnostics. Code reads OfflinePackageBuildResult.OmittedFeatures. Source Prefabs, Controllers and clips remain unchanged. If a state script formerly triggered transitions, gameplay must now provide those parameters.
Outside the current scope
BlendShape, material-property, visibility and object-reference animation curves are rejected instead of silently discarded. Comparisons with Unity Animator must also disable excluded Root Motion/IK; their complete behavior is not an equivalence target.
Capacity and diagnostics
Current V6 limits:
| Capacity | Maximum |
|---|---|
| Layers | 8 |
| Motion-graph nodes / nesting depth | 1024 / 16 |
| Worst-case active contributions per instance | 32 |
| Exported skeleton nodes / influences per vertex | 256 / 6 |
| Conditions per transition / internal transition steps per update | 8 / 64 |
Transitions and interrupted transitions can consume contributions simultaneously; counting only currently playing clips is insufficient. The converter reports over-capacity inputs rather than truncating animation or lowering the sample rate.
Accepted Controller types are AnimatorController and one directly wrapping AnimatorOverrideController; nested override chains are rejected. The base layer must be Override without AvatarMask. Use later layers for Additive or masks. These limits mean that not every serializable Animator configuration is supported.
Start with your own character. On failure, retain the full diagnostic code/object path; do not remove validators or edit generated data to force acceptance.