92 lines
1.7 KiB
C#
92 lines
1.7 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 自定义动画
|
|
/// </summary>
|
|
public abstract class CustomAnimation : MonoBehaviour
|
|
{
|
|
public bool playOnStart;
|
|
public float playDelay;
|
|
public float duration;
|
|
public bool loop;
|
|
public AnimationCurve animationCurve;
|
|
public bool animating
|
|
{
|
|
get
|
|
{
|
|
return _enableAnim;
|
|
}
|
|
}
|
|
public float timer;
|
|
protected bool _enableAnim = false;
|
|
|
|
|
|
protected virtual void Update()
|
|
{
|
|
if (_enableAnim)
|
|
{
|
|
if (timer < duration)
|
|
{
|
|
UpdateAnimation(timer / duration);
|
|
timer += Time.deltaTime;
|
|
}
|
|
else
|
|
{
|
|
timer = 0;
|
|
if (!loop)
|
|
{
|
|
_enableAnim = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public virtual void StartAnimation()
|
|
{
|
|
ResetAnim();
|
|
if (playDelay > 0)
|
|
{
|
|
Invoke("EnableAnim", playDelay);
|
|
}
|
|
else
|
|
{
|
|
EnableAnim();
|
|
}
|
|
}
|
|
|
|
public virtual void StopAnimation()
|
|
{
|
|
ResetAnim();
|
|
}
|
|
|
|
protected virtual void ResetAnim()
|
|
{
|
|
timer = 0;
|
|
_enableAnim = false;
|
|
UpdateAnimation(0);
|
|
CancelInvoke("EnableAnim");
|
|
}
|
|
|
|
protected void EnableAnim()
|
|
{
|
|
_enableAnim = true;
|
|
}
|
|
|
|
protected virtual void OnEnable()
|
|
{
|
|
if (playOnStart)
|
|
{
|
|
StartAnimation();
|
|
}
|
|
}
|
|
|
|
protected virtual void OnDisable()
|
|
{
|
|
ResetAnim();
|
|
}
|
|
|
|
protected abstract void UpdateAnimation(float v);
|
|
}
|