diff --git a/Framework/Editor/V0/Aac.cs b/Framework/Editor/V0/Aac.cs index 7df5fe2..f593772 100644 --- a/Framework/Editor/V0/Aac.cs +++ b/Framework/Editor/V0/Aac.cs @@ -610,12 +610,8 @@ namespace AnimatorAsCode.V0 var originalIndexToPreserveOrdering = FindIndexOf(layerName); if (originalIndexToPreserveOrdering != -1) { - foreach (var childAnimatorStateMachine in _animatorController.layers[originalIndexToPreserveOrdering].stateMachine.stateMachines) - { - childAnimatorStateMachine.stateMachine.states = new ChildAnimatorState[0]; - childAnimatorStateMachine.stateMachine.entryTransitions = new AnimatorTransition[0]; - childAnimatorStateMachine.stateMachine.anyStateTransitions = new AnimatorStateTransition[0]; - } + RecursivelyClearChildrenMachines(_animatorController.layers[originalIndexToPreserveOrdering].stateMachine); + _animatorController.layers[originalIndexToPreserveOrdering].stateMachine.stateMachines = new ChildAnimatorStateMachine[0]; _animatorController.layers[originalIndexToPreserveOrdering].stateMachine.states = new ChildAnimatorState[0]; _animatorController.layers[originalIndexToPreserveOrdering].stateMachine.entryTransitions = new AnimatorTransition[0]; @@ -638,6 +634,16 @@ namespace AnimatorAsCode.V0 return machinist; } + private void RecursivelyClearChildrenMachines(AnimatorStateMachine parentMachine) + { + // TODO: RemoveStateMachine might already be recursive + foreach (var childStateMachineHolder in parentMachine.stateMachines) + { + RecursivelyClearChildrenMachines(childStateMachineHolder.stateMachine); + parentMachine.RemoveStateMachine(childStateMachineHolder.stateMachine); + } + } + private int FindIndexOf(string layerName) { return _animatorController.layers.ToList().FindIndex(layer1 => layer1.name == layerName);