//======= Copyright (c) Valve Corporation, All rights reserved. =============== // // Purpose: Animation that moves based on a linear mapping // //============================================================================= using UnityEngine; using System.Collections; namespace Valve.VR.InteractionSystem { //------------------------------------------------------------------------- public class LinearAnimation : MonoBehaviour { public LinearMapping linearMapping; public new Animation animation; private AnimationState animState; private float animLength; private float lastValue; //------------------------------------------------- void Awake() { if ( animation == null ) { animation = GetComponent(); } if ( linearMapping == null ) { linearMapping = GetComponent(); } //We're assuming the animation has a single clip, and that's the one we're //going to scrub with the linear mapping. animation.playAutomatically = true; animState = animation[animation.clip.name]; //If the anim state's (i.e. clip's) wrap mode is Once (the default) or ClampForever, //Unity will automatically stop playing the anim, regardless of subsequent changes //to animState.time. Thus, we set the wrap mode to PingPong. animState.wrapMode = WrapMode.PingPong; animState.speed = 0; animLength = animState.length; } //------------------------------------------------- void Update() { float value = linearMapping.value; //No need to set the anim if our value hasn't changed. if ( value != lastValue ) { animState.time = value * animLength; } lastValue = value; } } }