Ejemplo n.º 1
0
            public void ApplyPresentationState(float deltaTime)
            {
                float rotateAngleRemaining = 0f;

                if (m_AnimState.turnDirection != 0)
                {
                    rotateAngleRemaining = Mathf.DeltaAngle(m_AnimState.rotation, m_AnimState.turnStartAngle) + m_Settings.animTurnAngle * m_AnimState.turnDirection;
                }

                if (m_AnimState.turnDirection == 0)
                {
                    m_Transition.Update((int)LocoMixerPort.Idle, m_Settings.turnTransitionSpeed, Time.deltaTime);
                }
                else
                {
                    var fraction  = 1f - Mathf.Abs(rotateAngleRemaining / m_Settings.animTurnAngle);
                    var mixerPort = (m_AnimState.turnDirection == -1) ? (int)LocoMixerPort.TurnL : (int)LocoMixerPort.TurnR;
                    var anim      = (m_AnimState.turnDirection == -1) ? m_AnimTurnL : m_AnimTurnR;

                    m_Transition.Update(mixerPort, m_Settings.turnTransitionSpeed, Time.deltaTime);
                    anim.SetTime(anim.GetAnimationClip().length *fraction);

                    if (m_LocomotionMixer.GetInputWeight((int)LocoMixerPort.Idle) < 0.01f)
                    {
                        m_AnimIdle.SetTime(0f);
                    }
                }


                float aimPitchFraction = m_AnimState.aimPitch / 180.0f;

                m_AnimAimLeft.SetTime(aimPitchFraction * m_AnimAimLeft.GetDuration());
                m_AnimAimMid.SetTime(aimPitchFraction * m_AnimAimMid.GetDuration());
                m_AnimAimRight.SetTime(aimPitchFraction * m_AnimAimRight.GetDuration());

                float aimYawLocal    = Mathf.DeltaAngle(m_AnimState.rotation, m_AnimState.aimYaw);
                float aimYawFraction = Mathf.Abs(aimYawLocal / m_Settings.aimYawAngle);

                m_AimMixer.SetInputWeight((int)AimMixerPort.AimMid, 1.0f - aimYawFraction);
                if (aimYawLocal < 0)
                {
                    m_AimMixer.SetInputWeight((int)AimMixerPort.AimLeft, aimYawFraction);
                    m_AimMixer.SetInputWeight((int)AimMixerPort.AimRight, 0.0f);
                }
                else
                {
                    m_AimMixer.SetInputWeight((int)AimMixerPort.AimLeft, 0.0f);
                    m_AimMixer.SetInputWeight((int)AimMixerPort.AimRight, aimYawFraction);
                }


                var job = m_FootIk.GetJobData <FootIkJob>();

                job.normalLeftFoot  = m_AnimState.footIkNormalLeft;
                job.normalRightFoot = m_AnimState.footIkNormaRight;
                job.ikOffset        = m_AnimState.footIkOffset;
                m_FootIk.SetJobData(job);
            }
Ejemplo n.º 2
0
            public void ApplyPresentationState(float deltaTime)
            {
                if (m_AnimStateData.charLocoState != m_CurrentAnimationState)
                {
                    var previousState  = m_CurrentAnimationState;
                    var prevController = (int)m_CurrentAnimationState < m_AnimStates.Length ? m_AnimStates[(int)previousState].controller : null;

                    m_CurrentAnimationState = m_AnimStateData.charLocoState;
                    var newController = m_AnimStates[(int)m_CurrentAnimationState].controller;

                    if (newController != prevController)
                    {
                        m_PreviousAnimationState = m_PreviousAnimationState == LocomotionState.MaxValue ? m_CurrentAnimationState : previousState;
                    }
                }

                var interpolationDuration = m_AnimStates[(int)m_CurrentAnimationState].transitionTimes[(int)m_PreviousAnimationState];
                var blendVel = interpolationDuration > 0 ? 1.0f / interpolationDuration : 1.0f / deltaTime;

                m_StateTranstion.Update(m_AnimStates[(int)m_CurrentAnimationState].port, blendVel, deltaTime);

                for (var i = 0; i < (int)LocomotionState.MaxValue; i++)
                {
                    if (m_AnimStates[i].controller != null && m_Mixer.GetInputWeight(m_AnimStates[i].port) > 0f)
                    {
                        m_AnimStates[i].controller.ApplyPresentationState(deltaTime);
                    }
                }
            }