campfire/Assets/SteamVR/InteractionSystem/Core/Scripts/LinearAnimation.cs
2020-04-29 20:40:05 +03:00

65 lines
1.7 KiB
C#

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