//======= Copyright (c) Valve Corporation, All rights reserved. =============== // // Purpose: Animator whose speed is set based on a linear mapping // //============================================================================= using UnityEngine; public class LinearAnimator : MonoBehaviour { public LinearMapping linearMapping; public Animator animator; private float currentLinearMapping = float.NaN; private int framesUnchanged = 0; public float speed = 1; public bool reverse; //------------------------------------------------- void Awake() { if ( animator == null ) { animator = GetComponent(); } animator.speed = 0.0f; if ( linearMapping == null ) { linearMapping = GetComponent(); } } //------------------------------------------------- void Update() { if ( currentLinearMapping != linearMapping.value ) { currentLinearMapping = linearMapping.value; animator.enabled = true; if (reverse) { animator.Play(0, 0, (1-currentLinearMapping) * speed); } else { animator.Play(0, 0, currentLinearMapping * speed); } framesUnchanged = 0; } else { framesUnchanged++; if ( framesUnchanged > 2 ) { animator.enabled = false; } } } }