Hi, I'm working on my DOTS Animator and this is my AnimatorController component: Code (CSharp): public unsafe struct AnimatorController : ISharedComponentData, IEquatable<AnimatorController> { public BlobArray<AnimatorParameterInfo> AnimatorParameterInfos; public BlobArray<StateTransition> AnyStateTransitions; public BlobArray<AnimatorState> States; public BlobArray<AnimatorLayerInfo> LayerInfos; public int AnimatorUniqueIdentifier; public bool Equals(AnimatorController Other) { return AnimatorUniqueIdentifier == Other.AnimatorUniqueIdentifier; } public override int GetHashCode() { return AnimatorUniqueIdentifier; } } In order to create a dummy animator controller for testing I wrote this method: Spoiler: Method Code (CSharp): public static BlobAssetReference<AnimatorController> CreateDummyAnimatorControlerAssetReference() { // State Indices const int IdleStateIndex = 0; const int LocomotionStateIndex = 1; const int DeadStateIndex = 2; // Parameters Indices const int SpeedParameterIndex = 0; const int IsAliveParamterIndex = 1; using (var AnimatorBuilder = new BlobBuilder(Allocator.Persistent)) { ref AnimatorController AnimatorController = ref AnimatorBuilder.ConstructRoot<AnimatorController>(); var ParameterInfos = AnimatorBuilder.Allocate(ref AnimatorController.AnimatorParameterInfos, 2); // Layers var LayerInfo = AnimatorBuilder.Allocate(ref AnimatorController.LayerInfos, 1); ref var DefaultLayerInfo = ref LayerInfo[0]; DefaultLayerInfo = new AnimatorLayerInfo { EntryStateIndex = IdleStateIndex, BlendingMode = AnimatorLayerBlendingMode.Override, BoneMask = ~0, }; // Parameters { SetParameter(AnimatorBuilder, ParameterInfos, SpeedParameterIndex, "Speed", AnimatorParameterType.Float); SetParameter(AnimatorBuilder, ParameterInfos, IsAliveParamterIndex, "IsAlive", AnimatorParameterType.Boolean, true); } var States = AnimatorBuilder.Allocate(ref AnimatorController.States, 3); // Idle, Locomotion, Dead // Idle State (Entry State) { ref var IdleState = ref States[IdleStateIndex]; IdleState = new AnimatorState { // Animation.Load("Animations\CharacterIdle"), PlaybackSpeed = 1.0f }; var Transitions = AnimatorBuilder.Allocate(ref IdleState.Transitions, 1); // Idle -> Locomotion { ref var ToLocomotion = ref Transitions[0]; ToLocomotion = new StateTransition { Duration = 0.2f, SourceStateIndex = IdleStateIndex, DestinationStateIndex = LocomotionStateIndex, }; var Conditions = AnimatorBuilder.Allocate(ref ToLocomotion.Conditions, 1); // Speed > 0.01 Conditions[0] = new TransitionCondition { CompareToParameterIndex = SpeedParameterIndex, Type = TransitionConditionType.FloatIsGreater, CompareFloatValue = 0.01f, }; } } // Locomotiom State { ref var LocomotionState = ref States[LocomotionStateIndex]; LocomotionState = new AnimatorState { // Animation.Load("Animations\CharacterWalking"), PlaybackSpeed = 1.0f }; var Transitions = AnimatorBuilder.Allocate(ref LocomotionState.Transitions, 1); // Locomotion -> Idle { ref var ToIdle = ref Transitions[0]; ToIdle = new StateTransition { Duration = 0.2f, SourceStateIndex = IdleStateIndex, DestinationStateIndex = LocomotionStateIndex, }; var Conditions = AnimatorBuilder.Allocate(ref ToIdle.Conditions, 1); // Speed < 0.01 Conditions[0] = new TransitionCondition { CompareToParameterIndex = SpeedParameterIndex, Type = TransitionConditionType.FloatIsLess, CompareFloatValue = 0.01f, }; } } // Dead State { ref var DeadState = ref States[DeadStateIndex]; DeadState = new AnimatorState { // AnimationClipIndex = Animation.Load("Animations\CharacterDeath"), PlaybackSpeed = 1.0f }; } // Any State Transitions { var AnyStateTransitions = AnimatorBuilder.Allocate(ref AnimatorController.AnyStateTransitions, 1); // -> Dead { ref var ToDeadTransition = ref AnyStateTransitions[0]; ToDeadTransition = new StateTransition { Duration = 0.05f, DestinationStateIndex = DeadStateIndex }; var Conditions = AnimatorBuilder.Allocate(ref ToDeadTransition.Conditions, 1); // IsAlive is false Conditions[0] = new TransitionCondition { CompareToParameterIndex = IsAliveParamterIndex, Type = TransitionConditionType.Boolean, CompareBooleanValue = false, }; } } return AnimatorBuilder.CreateBlobAssetReference<AnimatorController>(Allocator.Persistent); } Is that how I supposedly should use this?