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); }
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); } } }