AddCondition() public méthode

public AddCondition ( AnimatorStateTransition transition, bool equals ) : void
transition AnimatorStateTransition
equals bool
Résultat void
        void BuildLayer(AnimationLayer layerType, string layerName, List <VisemeAction> actions, MenuActions.MenuAction parentAction)
        {
            var controller = GetController(layerType);

            var VisemeValues = System.Enum.GetValues(typeof(VisemeEnum)).Cast <VisemeEnum>();

            //Add parameter
            AddParameter(controller, "Viseme", AnimatorControllerParameterType.Int, 0);

            //Prepare layer
            var layer = GetControllerLayer(controller, layerName);

            layer.stateMachine.entryTransitions    = null;
            layer.stateMachine.anyStateTransitions = null;
            layer.stateMachine.states           = null;
            layer.stateMachine.entryPosition    = StatePosition(-1, 0);
            layer.stateMachine.anyStatePosition = StatePosition(-1, 1);
            layer.stateMachine.exitPosition     = StatePosition(-1, 2);

            //Default
            AnimatorState defaultState  = null;
            VisemeAction  defaultAction = null;
            var           unusedValues  = new List <VisemeEnum>();

            foreach (var value in VisemeValues)
            {
                unusedValues.Add(value);
            }

            //Build states
            int actionIter = 0;

            foreach (var action in this.actions)
            {
                //Check if valid
                if (!action.visimeTable.IsModified())
                {
                    EditorUtility.DisplayDialog("Build Warning", $"Visemes {action.name} has no selected conditions.", "Okay");
                    continue;
                }

                //Build
                var state = layer.stateMachine.AddState(action.name, StatePosition(0, actionIter + 1));
                state.motion = action.GetAnimation(layerType, true);
                actionIter  += 1;

                //Conditions
                foreach (var value in VisemeValues)
                {
                    AddCondition(value);
                }
                void AddCondition(BaseActions.VisemeEnum visime)
                {
                    if (action.visimeTable.GetValue(visime))
                    {
                        //Transition
                        var transition = layer.stateMachine.AddAnyStateTransition(state);
                        transition.hasExitTime         = false;
                        transition.exitTime            = 0;
                        transition.duration            = action.fadeIn;
                        transition.canTransitionToSelf = false;
                        transition.AddCondition(AnimatorConditionMode.Equals, (int)visime, "Viseme");

                        //Parent
                        if (parentAction != null)
                        {
                            parentAction.AddCondition(transition, true);
                        }

                        //Cleanup
                        unusedValues.Remove(visime);
                    }
                }

                //Store default
                if (action.visimeTable.sil)
                {
                    defaultState  = state;
                    defaultAction = action;
                }
            }

            //Default state
            if (defaultState == null)
            {
                defaultState = layer.stateMachine.AddState("Default", StatePosition(0, 0));
            }
            layer.stateMachine.defaultState = defaultState;

            //Animation Layer Weight
            var layerWeight = defaultState.AddStateMachineBehaviour <VRC.SDK3.Avatars.Components.VRCAnimatorLayerControl>();

            layerWeight.goalWeight    = 1;
            layerWeight.layer         = GetLayerIndex(controller, layer);
            layerWeight.blendDuration = 0;
            layerWeight.playable      = VRC.SDKBase.VRC_AnimatorLayerControl.BlendableLayer.FX;

            //Default transitions
            foreach (var visime in unusedValues)
            {
                //Transition
                var transition = layer.stateMachine.AddAnyStateTransition(defaultState);
                transition.hasExitTime         = false;
                transition.exitTime            = 0;
                transition.duration            = defaultAction != null ? defaultAction.fadeIn : 0f;
                transition.canTransitionToSelf = false;
                transition.AddCondition(AnimatorConditionMode.Equals, (int)visime, "Viseme");
            }

            //Parent
            if (parentAction != null)
            {
                var transition = layer.stateMachine.AddAnyStateTransition(defaultState);
                transition.hasExitTime         = false;
                transition.exitTime            = 0;
                transition.duration            = defaultAction != null ? defaultAction.fadeIn : 0f;
                transition.canTransitionToSelf = false;
                parentAction.AddCondition(transition, false);
            }
        }
Exemple #2
0
        void BuildLayer(AnimationLayer layerType, string layerName, List <GestureAction> actions, MenuActions.MenuAction parentAction)
        {
            var controller = GetController(layerType);

            //Add parameter
            if (side == GestureSide.Left || side == GestureSide.Both)
            {
                AddParameter(controller, "GestureLeft", AnimatorControllerParameterType.Int, 0);
            }
            if (side == GestureSide.Right || side == GestureSide.Both)
            {
                AddParameter(controller, "GestureRight", AnimatorControllerParameterType.Int, 0);
            }

            //Prepare layer
            var layer = GetControllerLayer(controller, layerName);

            layer.stateMachine.entryTransitions    = null;
            layer.stateMachine.anyStateTransitions = null;
            layer.stateMachine.states           = null;
            layer.stateMachine.entryPosition    = StatePosition(-1, 0);
            layer.stateMachine.anyStatePosition = StatePosition(-1, 1);
            layer.stateMachine.exitPosition     = StatePosition(-1, 2);

            //Default state
            AnimatorState defaultState   = null;
            GestureAction defaultAction  = null;
            var           unusedGestures = new List <GestureEnum>();

            unusedGestures.Add(GestureEnum.Neutral);
            unusedGestures.Add(GestureEnum.Fist);
            unusedGestures.Add(GestureEnum.OpenHand);
            unusedGestures.Add(GestureEnum.FingerPoint);
            unusedGestures.Add(GestureEnum.Victory);
            unusedGestures.Add(GestureEnum.RockNRoll);
            unusedGestures.Add(GestureEnum.HandGun);
            unusedGestures.Add(GestureEnum.ThumbsUp);

            //Build states
            int actionIter = 0;

            foreach (var action in this.actions)
            {
                //Check if valid
                if (!action.gestureTable.IsModified())
                {
                    EditorUtility.DisplayDialog("Build Warning", $"Simple Gesture {action.name} has no selected conditions.", "Okay");
                    continue;
                }

                //Build
                var state = layer.stateMachine.AddState(action.name, StatePosition(0, actionIter + 1));
                state.motion = action.GetAnimation(layerType, true);
                actionIter  += 1;

                //Conditions
                AddGestureCondition(GestureEnum.Neutral);
                AddGestureCondition(GestureEnum.Fist);
                AddGestureCondition(GestureEnum.OpenHand);
                AddGestureCondition(GestureEnum.FingerPoint);
                AddGestureCondition(GestureEnum.Victory);
                AddGestureCondition(GestureEnum.RockNRoll);
                AddGestureCondition(GestureEnum.HandGun);
                AddGestureCondition(GestureEnum.ThumbsUp);
                void AddGestureCondition(BaseActions.GestureEnum gesture)
                {
                    if (!action.gestureTable.GetValue(gesture))
                    {
                        return;
                    }

                    //Transition
                    var transition = layer.stateMachine.AddAnyStateTransition(state);

                    transition.hasExitTime = false;
                    transition.exitTime    = 0;
                    transition.duration    = action.fadeIn;

                    if (side == GestureSide.Left || side == GestureSide.Both)
                    {
                        transition.AddCondition(AnimatorConditionMode.Equals, (int)gesture, "GestureLeft");
                    }
                    if (side == GestureSide.Right || side == GestureSide.Both)
                    {
                        transition.AddCondition(AnimatorConditionMode.Equals, (int)gesture, "GestureRight");
                    }

                    //Parent
                    if (parentAction != null && gesture != GestureEnum.Neutral)
                    {
                        parentAction.AddCondition(transition, true);
                    }

                    //Cleanup
                    unusedGestures.Remove(gesture);
                }

                //Default
                if (action.gestureTable.neutral)
                {
                    defaultState  = state;
                    defaultAction = action;
                }
            }

            //Default state
            if (defaultState == null)
            {
                defaultState = layer.stateMachine.AddState("Neutral", StatePosition(0, 0));
            }
            layer.stateMachine.defaultState = defaultState;

            //Animation Layer Weight
            var layerWeight = defaultState.AddStateMachineBehaviour <VRC.SDK3.Avatars.Components.VRCAnimatorLayerControl>();

            layerWeight.goalWeight    = 1;
            layerWeight.layer         = GetLayerIndex(controller, layer);
            layerWeight.blendDuration = 0;
            layerWeight.playable      = VRC.SDKBase.VRC_AnimatorLayerControl.BlendableLayer.FX;

            //Default transitions
            foreach (var gesture in unusedGestures)
            {
                //Transition
                var transition = layer.stateMachine.AddAnyStateTransition(defaultState);
                transition.hasExitTime = false;
                transition.exitTime    = 0;
                transition.duration    = defaultAction != null ? defaultAction.fadeIn : 0f;

                if (side == GestureSide.Left || side == GestureSide.Both)
                {
                    transition.AddCondition(AnimatorConditionMode.Equals, (int)gesture, "GestureLeft");
                }
                if (side == GestureSide.Right || side == GestureSide.Both)
                {
                    transition.AddCondition(AnimatorConditionMode.Equals, (int)gesture, "GestureRight");
                }
            }

            //Parent
            if (parentAction != null)
            {
                var transition = layer.stateMachine.AddAnyStateTransition(defaultState);
                transition.hasExitTime = false;
                transition.exitTime    = 0;
                transition.duration    = defaultAction != null ? defaultAction.fadeIn : 0f;

                parentAction.AddCondition(transition, false);
            }
        }