コード例 #1
0
    private static void ImportTransitions(AnimatorStateMachine stateMachine, ChildAnimatorState[] states)
    {
        var transitionEquality = new TransitionEqualityComparer();

        foreach (var state in states)
        {
            foreach (var transition in state.state.transitions)
            {
                var fromState = FindStateByName(stateMachine, state.state.name);
                var toState   = FindStateByName(stateMachine, transition.destinationState.name);

                AnimatorStateTransition newTransition = new AnimatorStateTransition();
                newTransition.destinationState = toState;

                var originalCondition = transition.conditions[0];
                var conditionCopy     = new AnimatorCondition();
                conditionCopy.mode      = originalCondition.mode;
                conditionCopy.parameter = originalCondition.parameter;
                conditionCopy.threshold = originalCondition.threshold;

                newTransition.conditions = new AnimatorCondition[]
                {
                    conditionCopy
                };

                if (!fromState.transitions.Contains(newTransition, transitionEquality))
                {
                    fromState.AddTransition(newTransition);
                }
            }
        }
    }
コード例 #2
0
        public PlainStateMachineFake(IEqualityComparer <TState> stateComparer, IEqualityComparer <TTrigger> triggerComparer)
        {
            if (stateComparer == null)
            {
                throw new ArgumentNullException(nameof(stateComparer));
            }
            if (triggerComparer == null)
            {
                throw new ArgumentNullException(nameof(triggerComparer));
            }

            _stateComparer   = new StateEqualityComparer(stateComparer);
            _triggerComparer = new TriggerEqualityComparer(triggerComparer);

            _transitionEqualityComparer = new TransitionEqualityComparer(_stateComparer, _triggerComparer);

            _states                 = new Dictionary <TState, IState>(_stateComparer);
            _transitions            = new HashSet <Transition <TState, TTrigger> >(_transitionEqualityComparer);
            _guardConditions        = new Dictionary <Transition <TState, TTrigger>, List <IGuardCondition> >(_transitionEqualityComparer);
            _stateEventHandlers     = new Dictionary <TState, HashSet <IStateEventHandler> >(_stateComparer);
            _transitionCommandQueue = new Queue <TransitionCommand>();
        }