12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //======= 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;
- }
- }
- }
|