Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- [RequireComponent(typeof(Animator))]
- public class AnimatorSpeedMod : MonoBehaviour {
- public float animMod;
- public Animator animator;
- public AnimatorStatesHandler state;
- public Rigidbody rb;
- public float minAnimSpeed = 0.5f, maxAnimSpeed = 2.0f;
- float lastAnimatorMoveTime;
- void Reset()
- {
- if (animator == null)
- animator = GetComponent<Animator> ();
- if (state == null)
- state = GetComponent<AnimatorStatesHandler>();
- if (rb == null)
- rb = GetComponent<Rigidbody >();
- }
- protected virtual void OnAnimatorMove()
- {
- Vector3 dPos = animator.deltaPosition;
- float deltaTime = Time.time - lastAnimatorMoveTime;
- lastAnimatorMoveTime = Time.time;
- Vector3 animatorVelocity = dPos / deltaTime;
- AnimatorStateHandler_Humanoid humanoidState = (AnimatorStateHandler_Humanoid)state;
- if (humanoidState != null && humanoidState.isLanding) {
- animator.speed = 1.0f;
- return;
- }
- if (animatorVelocity.sqrMagnitude > 0.1f && state.isGrounded) {
- float mod = rb.velocity.magnitude / animatorVelocity.magnitude;
- animMod = Mathf.Clamp (mod, minAnimSpeed, maxAnimSpeed);
- animator.speed = animMod;
- } else {
- animator.speed = 1.0f;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement