2026-03-24 11:39:01 +08:00

60 lines
1.3 KiB
C#

//======= 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>();
}
animator.speed = 0.0f;
if ( linearMapping == null )
{
linearMapping = GetComponent<LinearMapping>();
}
}
//-------------------------------------------------
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;
}
}
}
}