|
|
- //======= 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<Animation>();
- }
-
- if ( linearMapping == null )
- {
- linearMapping = GetComponent<LinearMapping>();
- }
-
- //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;
- }
- }
- }
|