GetStateMachine() 공개 메소드

public GetStateMachine ( int index ) : StateMachine
index int
리턴 StateMachine
예제 #1
0
 static void FindAllAniInControlMachine(UnityEditorInternal.StateMachine machine, List <AnimationClip> list)
 {
     for (int i = 0; i < machine.stateCount; i++)
     {
         var s = machine.GetState(i);
         var m = s.GetMotion();
         if (m != null)
         {
             if (list.Contains(m as AnimationClip) == false)
             {
                 list.Add(m as AnimationClip);
                 if (m.name != s.name)
                 {
                     //Debug.LogWarning("发现一个问题,clipname 和 state name 不相等 " + m.name + "=>" + s.name);
                 }
                 mapClip2State[m.name] = s.name;                    //建立一张转换表,把clip的名字转换为state的名字,以正常clone
             }
         }
     }
     for (int i = 0; i < machine.stateMachineCount; i++)
     {
         var m = machine.GetStateMachine(i);
         FindAllAniInControlMachine(m, list);
     }
 }
예제 #2
0
    private List <AnimationCustomCurves> GetCurvesFromStateMachine(UnityEditorInternal.StateMachine stateMachine, string namePrefix)
    {
        var animCurvesList = new List <AnimationCustomCurves>();

        // Por cada estado de la maquina
        for (int stateIndex = 0; stateIndex < stateMachine.stateCount; stateIndex++)
        {
            //Extrae el estado y el animation clip
            var state = stateMachine.GetState(stateIndex);
            var clip  = state.GetMotion() as AnimationClip;

            // Si no esta el clip ya en la lista lo agrega
            if (!animCurvesList.Exists(x => x.name == clip.name))
            {
                var deltaX = new AnimationCurve();
                var deltaY = new AnimationCurve();
                var deltaZ = new AnimationCurve();

                // Extrae las curvas
#pragma warning disable 612, 618
                foreach (var curveData in AnimationUtility.GetAllCurves(clip))
#pragma warning restore 612, 618
                {
                    if (curveData.propertyName == "deltaX")
                    {
                        deltaX = NormalizeCurveLength(curveData.curve, 1f);
                    }
                    else if (curveData.propertyName == "deltaY")
                    {
                        deltaY = NormalizeCurveLength(curveData.curve, 1f);
                    }
                    else if (curveData.propertyName == "deltaZ")
                    {
                        deltaZ = NormalizeCurveLength(curveData.curve, 1f);
                    }
                }

                // Agrega el nodo
                animCurvesList.Add(new AnimationCustomCurves(namePrefix + state.name, deltaX, deltaY, deltaZ));
            }
        }

        // Para cada sub maquina de estado
        for (int index = 0; index < stateMachine.stateMachineCount; index++)
        {
            // Extrae la maquina de estados
            var subStateMachine = stateMachine.GetStateMachine(index);

            // Agrega al prefijo el nombre de la sub maquina
            var subNamePrefix = subStateMachine.name + (".");

            // Extrae las curvas de la submaquina
            animCurvesList.AddRange(GetCurvesFromStateMachine(subStateMachine, subNamePrefix));
        }

        return(animCurvesList);
    }
    public static IEnumerable <UnityEditorInternal.State> EnumerateStatesRecursive(this UnityEditorInternal.StateMachine sm)
    {
        foreach (var i in EnumerateStates(sm))
        {
            yield return(i);
        }

        for (int i = 0; i < sm.stateMachineCount; ++i)
        {
            foreach (var j in EnumerateStatesRecursive(sm.GetStateMachine(i)))
            {
                yield return(j);
            }
        }
    }
    public static IEnumerable <KeyValuePair <string, string> > EnumerateStateNamesRecursive(this UnityEditorInternal.StateMachine sm)
    {
        for (int i = 0; i < sm.stateCount; ++i)
        {
            yield return(new KeyValuePair <string, string>(sm.name + "." + sm.GetState(i).name, sm.GetState(i).name));
        }

        for (int i = 0; i < sm.stateMachineCount; ++i)
        {
            var ssm = sm.GetStateMachine(i);
            foreach (var j in EnumerateStateNamesRecursive(ssm))
            {
                yield return(j);
            }
        }
    }
    private static int GetTransitionsCountFromStateMachine(StateMachine sm)
    {
        int total = 0;
        List<Transition> transitions = new List<Transition>();

        for (int i = 0; i < sm.stateCount; ++i)
        {
            transitions.AddRange(sm.GetTransitionsFromState(sm.GetState(i)));
        }

        total = transitions.Count;

        for (int i = 0; i < sm.stateMachineCount; ++i)
        {
            total += GetTransitionsCountFromStateMachine(sm.GetStateMachine(i));
        }

        return total;
    }
    private static string[] GetTransitionNamesFromStateMachine(StateMachine sm)
    {
        List<string> transitionNames = new List<string>();
        List<Transition> transitions = new List<Transition>();

        for (int i = 0; i < sm.stateCount; ++i)
        {
            transitions.AddRange(sm.GetTransitionsFromState(sm.GetState(i)));
        }

        foreach (Transition transition in transitions)
            transitionNames.Add(transition.uniqueName);

        for (int i = 0; i < sm.stateMachineCount; ++i)
        {
            transitionNames.AddRange(GetTransitionNamesFromStateMachine(sm.GetStateMachine(i)));
        }

        return transitionNames.ToArray();
    }
    private static int[] GetTransitionKeysFromStateMachine(StateMachine sm)
    {
        List<int> transitionKeys = new List<int>();
        List<Transition> transitions = new List<Transition>();

        for (int i = 0; i < sm.stateCount; ++i)
        {
            transitions.AddRange(sm.GetTransitionsFromState(sm.GetState(i)));
        }

        foreach (Transition transition in transitions)
            transitionKeys.Add(transition.uniqueNameHash);

        for (int i = 0; i < sm.stateMachineCount; ++i)
        {
            transitionKeys.AddRange(GetTransitionKeysFromStateMachine(sm.GetStateMachine(i)));
        }

        return transitionKeys.ToArray();
    }
    private static string[] GetStateNamesFromStateMachine(StateMachine sm)
    {
        List<string> stateNames = new List<string>();

        for (int i = 0; i < sm.stateCount; ++i)
        {
            stateNames.Add(sm.GetState(i).uniqueName);
        }

        for (int i = 0; i < sm.stateMachineCount; ++i)
        {
            stateNames.AddRange(GetStateNamesFromStateMachine(sm.GetStateMachine(i)));
        }

        return stateNames.ToArray();
    }
    private static int[] GetStateKeysFromStateMachine(StateMachine sm)
    {
        List<int> stateKeys = new List<int>();

        for (int i = 0; i < sm.stateCount; ++i)
        {
            stateKeys.Add(sm.GetState(i).uniqueNameHash);
        }

        for (int i = 0; i < sm.stateMachineCount; ++i)
        {
            stateKeys.AddRange(GetStateKeysFromStateMachine(sm.GetStateMachine(i)));
        }

        return stateKeys.ToArray();
    }
예제 #10
0
    private static void FromStateMachineToTransitionName(StateMachine stateMachine, List<string> transitionNames)
    {
        for (int i = 0; i < stateMachine.stateCount; i++) {
            Transition[] trans = stateMachine.GetTransitionsFromState(stateMachine.GetState(i));
            foreach(Transition tran in trans) {
                transitionNames.Add(tran.uniqueName);
            }
        }

        for (int i = 0; i < stateMachine.stateMachineCount; i++) {
            FromStateMachineToTransitionName(stateMachine.GetStateMachine(i), transitionNames);
        }
    }
예제 #11
0
    private static void FromStateMachineToStateName(StateMachine stateMachine, List<string> stateNames)
    {
        for (int i = 0; i < stateMachine.stateCount; i++) {
            stateNames.Add(stateMachine.GetState(i).uniqueName);
        }

        for (int i = 0; i < stateMachine.stateMachineCount; i++) {
            FromStateMachineToStateName(stateMachine.GetStateMachine(i), stateNames);
        }
    }
예제 #12
0
    private static void FromStateMachineToStateKey(StateMachine stateMachine, List<int> stateKeys)
    {
        for (int i = 0; i < stateMachine.stateCount; i++) {
            stateKeys.Add(stateMachine.GetState(i).uniqueNameHash);
        }

        for (int i = 0; i < stateMachine.stateMachineCount; i++) {
            FromStateMachineToStateKey(stateMachine.GetStateMachine(i), stateKeys);
        }
    }
 static ControllerStateMachine ConverStateMachine(UnityEditorInternal.StateMachine stateMachine, ControllerState[] states)
 {
     return(new ControllerStateMachine()
     {
         name = stateMachine.name,
         hash = Animator.StringToHash(stateMachine.name),
         states = states.Where(i => stateMachine.EnumerateStates().Any(j => j.uniqueNameHash == i.uniqueNameHash)).ToArray(),
         subStateMachines = Enumerable.Range(0, stateMachine.stateMachineCount).Select(i => ConverStateMachine(stateMachine.GetStateMachine(i), states)).ToArray()
     });
 }