Ejemplo n.º 1
0
            public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphJump settings)
            {
                m_AnimState = controller.GetComponent <AnimStateData>();

                m_Mixer = AnimationLayerMixerPlayable.Create(graph, 2);

                m_AnimJump = AnimationClipPlayable.Create(graph, settings.animJump);
                m_AnimJump.SetApplyFootIK(true);
                m_AnimJump.SetDuration(settings.animJump.length);
                m_AnimJump.Pause();
                graph.Connect(m_AnimJump, 0, m_Mixer, 0);
                m_Mixer.SetInputWeight(0, 1);

                var gameJumpHeight   = 1.0f;
                var gameJumpDuration = 0.3f;
                var animJumpVel      = settings.jumpHeight / settings.animJump.length;
                var characterJumpVel = gameJumpHeight / gameJumpDuration;

                m_PlaySpeed = characterJumpVel / animJumpVel;

                m_AnimAim = AnimationClipPlayable.Create(graph, settings.animAim);
                m_AnimAim.SetApplyFootIK(false);
                m_AnimAim.Pause();
                graph.Connect(m_AnimAim, 0, m_Mixer, 1);
                m_Mixer.SetInputWeight(1, 1);
                m_Mixer.SetLayerAdditive(1, true);

                m_AimTimeFactor = settings.animAim.length / 180.0f;
            }
Ejemplo n.º 2
0
            public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphStand settings)
            {
                m_Settings       = settings;
                m_AnimState      = controller.GetComponent <AnimStateData>();
                m_PredictedState = controller.GetComponent <LogicStateData>();

                m_Mask = 1 << LayerMask.NameToLayer("Default") | 1 << LayerMask.NameToLayer("Platform");

                m_LocomotionMixer = AnimationMixerPlayable.Create(graph, (int)LocoMixerPort.Count);

                m_AnimIdle = AnimationClipPlayable.Create(graph, settings.animIdle);
                graph.Connect(m_AnimIdle, 0, m_LocomotionMixer, (int)LocoMixerPort.Idle);
                m_LocomotionMixer.SetInputWeight((int)LocoMixerPort.Idle, 1.0f);

                m_AnimTurnL = CreateTurnPlayable(graph, settings.animTurnL, m_LocomotionMixer, LocoMixerPort.TurnL);
                m_AnimTurnR = CreateTurnPlayable(graph, settings.animTurnR, m_LocomotionMixer, LocoMixerPort.TurnR);

                var ports = new int[] { (int)LocoMixerPort.Idle, (int)LocoMixerPort.TurnL, (int)LocoMixerPort.TurnR };

                m_Transition = new SimpleTranstion <AnimationMixerPlayable>(m_LocomotionMixer, ports);

                if (settings.animTurnL.events.Length != 0)
                {
                    m_LeftTurnFootFalls  = ExtractFootFalls(settings.animTurnL);
                    m_RightTurnFootFalls = ExtractFootFalls(settings.animTurnR);
                }

                var animator  = controller.GetComponent <Animator>();
                var skeleton  = controller.GetComponent <Skeleton>();
                var leftToes  = skeleton.bones[skeleton.GetBoneIndex(settings.leftToeBone.GetHashCode())];
                var rightToes = skeleton.bones[skeleton.GetBoneIndex(settings.rightToeBone.GetHashCode())];

                var ikJob = new FootIkJob
                {
                    settings = settings.footIK,
                    leftToe  = animator.BindStreamTransform(leftToes),
                    rightToe = animator.BindStreamTransform(rightToes)
                };

                m_FootIk = AnimationScriptPlayable.Create(graph, ikJob, 1);
                graph.Connect(m_LocomotionMixer, 0, m_FootIk, 0);
                m_FootIk.SetInputWeight(0, 1f);

                m_AimMixer = AnimationMixerPlayable.Create(graph, (int)AimMixerPort.Count, true);

                m_AnimAimLeft  = CreateAimPlayable(graph, settings.animAimLeft, m_AimMixer, AimMixerPort.AimLeft);
                m_AnimAimMid   = CreateAimPlayable(graph, settings.animAimMid, m_AimMixer, AimMixerPort.AimMid);
                m_AnimAimRight = CreateAimPlayable(graph, settings.animAimRight, m_AimMixer, AimMixerPort.AimRight);

                m_AdditiveMixer = AnimationLayerMixerPlayable.Create(graph);

                var locoMixerPort = m_AdditiveMixer.AddInput(m_FootIk, 0);

                m_AdditiveMixer.SetInputWeight(locoMixerPort, 1);

                var aimMixerPort = m_AdditiveMixer.AddInput(m_AimMixer, 0);

                m_AdditiveMixer.SetInputWeight(aimMixerPort, 1);
                m_AdditiveMixer.SetLayerAdditive((uint)aimMixerPort, true);
            }
Ejemplo n.º 3
0
            public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphSquash settings)
            {
                m_Settings = settings;

                m_AnimState      = controller.GetComponent <AnimStateData>();
                m_PredictedState = controller.GetComponent <LogicStateData>();

                m_Mixer = AnimationLayerMixerPlayable.Create(graph, 2);

                m_AnimSquash = AnimationClipPlayable.Create(graph, settings.animSquash);
                m_AnimSquash.SetApplyFootIK(false);
                m_AnimSquash.SetDuration(settings.animSquash.length);
                m_AnimSquash.Pause();

                m_Mixer.ConnectInput(1, m_AnimSquash, 0, 0.0f);
                m_Mixer.SetLayerAdditive(1, true);
            }
Ejemplo n.º 4
0
        void Awake()
        {
            m_AbilityMove         = GetComponent <AbilityMove>();
            m_AnimStateController = GetComponent <AnimStateController>();

            m_AnimState = GetComponent <AnimStateData>();
            if (m_AnimState == null)
            {
                m_AnimState = gameObject.AddComponent <AnimStateData>();
            }

            m_PredictedState = GetComponent <LogicStateData>();
            if (m_PredictedState == null)
            {
                m_PredictedState = gameObject.AddComponent <LogicStateData>();
            }
            m_PredictedState.position = transform.position;
            m_PredictedState.velocity = Vector3.zero;
        }
Ejemplo n.º 5
0
            public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphMove3Dir settings)
            {
                m_AnimState = controller.GetComponent <AnimStateData>();

                m_MovementMixer = AnimationMixerPlayable.Create(graph, 3);

                m_MovementClips = new AnimationClipPlayable[3];
                m_MovementClips[(int)Direction.Forward]      = AnimationClipPlayable.Create(graph, settings.animMoveN);
                m_MovementClips[(int)Direction.ForwardLeft]  = AnimationClipPlayable.Create(graph, settings.animMoveNW);
                m_MovementClips[(int)Direction.ForwardRight] = AnimationClipPlayable.Create(graph, settings.animMoveNE);
                foreach (var clip in m_MovementClips)
                {
                    clip.SetApplyFootIK(true);
                    clip.SetSpeed(settings.animMovePlaySpeed);

                    graph.Connect(m_MovementClips[(int)Direction.Forward], 0, m_MovementMixer, (int)Direction.Forward);
                    graph.Connect(m_MovementClips[(int)Direction.ForwardLeft], 0, m_MovementMixer, (int)Direction.ForwardLeft);
                    graph.Connect(m_MovementClips[(int)Direction.ForwardRight], 0, m_MovementMixer, (int)Direction.ForwardRight);
                }
            }
Ejemplo n.º 6
0
            public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphInAir settings)
            {
                m_AnimState = controller.GetComponent <AnimStateData>();

                m_Mixer = AnimationLayerMixerPlayable.Create(graph, 2);

                m_AnimInAir = AnimationClipPlayable.Create(graph, settings.animInAir);
                m_AnimInAir.Play();
                m_AnimInAir.SetApplyFootIK(false);
                graph.Connect(m_AnimInAir, 0, m_Mixer, 0);
                m_Mixer.SetInputWeight(0, 1);

                m_AnimAim = AnimationClipPlayable.Create(graph, settings.animAim);
                m_AnimAim.SetApplyFootIK(false);
                m_AnimAim.Pause();
                graph.Connect(m_AnimAim, 0, m_Mixer, 1);
                m_Mixer.SetInputWeight(1, 1);
                m_Mixer.SetLayerAdditive(1, true);

                m_AimTimeFactor = settings.animAim.length / 180.0f;
            }
Ejemplo n.º 7
0
            public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphMove8Dir settings)
            {
                m_Settings  = settings;
                m_AnimState = controller.GetComponent <AnimStateData>();

                m_LocomotionMixer = AnimationLayerMixerPlayable.Create(graph, 3);

                m_BlendTree             = new BlendTree2d(graph, settings.blendSpaceNodes);
                m_BlendTree.masterSpeed = settings.animMovePlaySpeed;
                graph.Connect(m_BlendTree.rootPlayable, 0, m_LocomotionMixer, 0);
                m_LocomotionMixer.SetInputWeight(0, 1.0f);

                if (settings.animAim != null)
                {
                    m_AnimAim = AnimationClipPlayable.Create(graph, settings.animAim);
                    m_AnimAim.SetApplyFootIK(false);
                    m_AnimAim.Pause();
                    m_AimTimeFactor = m_AnimAim.GetAnimationClip().length / 180.0f;

                    graph.Connect(m_AnimAim, 0, m_LocomotionMixer, 1);
                    m_LocomotionMixer.SetInputWeight(1, 1.0f);
                    m_LocomotionMixer.SetLayerAdditive(1, true);
                }
            }
Ejemplo n.º 8
0
        void Start()
        {
            m_AnimState      = GetComponent <AnimStateData>();
            m_PredictedState = GetComponent <LogicStateData>();

            m_PlayableGraph  = PlayableGraph.Create(name);
            m_AnimGraph      = animStateDefinition.Instatiate(this, m_PlayableGraph);
            m_AnimGraphLogic = m_AnimGraph as IGraphLogic;
            m_AnimGraphState = m_AnimGraph as IGraphState;

            m_PlayableGraph.Play();
#if UNITY_EDITOR
            GraphVisualizerClient.Show(m_PlayableGraph);
#endif

            var outputPlayable = Playable.Null;
            var outputPort     = 0;
            m_AnimGraph.GetPlayableOutput(0, ref outputPlayable, ref outputPort);

            var animator = GetComponentInChildren <Animator>();
            animator.fireEvents = enableAnimatorEvent;
            var animationOutput = AnimationPlayableOutput.Create(m_PlayableGraph, "Animator", animator);
            animationOutput.SetSourcePlayable(outputPlayable, outputPort);
        }
Ejemplo n.º 9
0
            public Instance(AnimStateController animStateController, PlayableGraph graph, AnimGraphStateSelector settings)
            {
                m_AnimStateData = animStateController.GetComponent <AnimStateData>();

                m_Mixer = AnimationMixerPlayable.Create(graph, 0, true);

                m_AnimStates = new AnimationControllerEntry[(int)LocomotionState.MaxValue];

                var controllers          = new Dictionary <AnimGraphAsset, IAnimGraphInstance>();
                var controllerPorts      = new Dictionary <IAnimGraphInstance, int>();
                var stateTransitionPorts = new List <int>();
                var transitionTimes      = new Dictionary <IAnimGraphInstance, float[]>();

                foreach (var controllerDef in settings.controllers)
                {
                    if (controllerDef.template == null)
                    {
                        continue;
                    }
                    if (controllers.ContainsKey(controllerDef.template))
                    {
                        continue;
                    }

                    var controller = controllerDef.template.Instatiate(animStateController, graph);
                    controllers.Add(controllerDef.template, controller);

                    var outputPlayable = Playable.Null;
                    var outputPort     = 0;
                    controller.GetPlayableOutput(0, ref outputPlayable, ref outputPort);
                    var port = m_Mixer.AddInput(outputPlayable, outputPort);

                    controllerPorts.Add(controller, port);
                    stateTransitionPorts.Add(port);

                    var times = new float[(int)LocomotionState.MaxValue];
                    for (var i = 0; i < (int)LocomotionState.MaxValue; i++)
                    {
                        times[i] = controllerDef.transitionTime;
                    }

                    for (var i = 0; i < controllerDef.customTransitions.Length; i++)
                    {
                        var sourceStateIndex = (int)controllerDef.customTransitions[i].sourceState;
                        var time             = controllerDef.customTransitions[i].transtionTime;
                        times[sourceStateIndex] = time;
                    }

                    transitionTimes.Add(controller, times);
                }

                foreach (var controllerDef in settings.controllers)
                {
                    var animState = controllerDef.animationState;
                    if (m_AnimStates[(int)animState].controller != null)
                    {
                        continue;
                    }

                    var controller = controllers[controllerDef.template];
                    m_AnimStates[(int)animState].controller       = controller;
                    m_AnimStates[(int)animState].animStateUpdater = controller as IGraphState;
                    m_AnimStates[(int)animState].port             = controllerPorts[controller];
                    m_AnimStates[(int)animState].transitionTimes  = transitionTimes[controller];
                }

                m_StateTranstion = new SimpleTranstion <AnimationMixerPlayable>(m_Mixer, stateTransitionPorts.ToArray());
            }