Use a Unity function to clear sub-state machines:

- The previous method may not have been safe for clearing assets.
This commit is contained in:
Haï~
2022-05-10 20:06:47 +02:00
parent 46c7bf9000
commit 7bf965824d
+12 -6
View File
@@ -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);