MasterNin ECSAnimator
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

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.