using UnityEngine;
using System.Collections.Generic;
using UnityEngine.UI;
///
/// 序列帧动画组件
///
[RequireComponent(typeof(Image))]
public class UGUISpriteAnimation : MonoBehaviour
{
private Image ImageSource;
private int mCurFrame = 0;
private float mDelta = 0;
public float FPS = 5;
public List SpriteFrames;
public bool IsPlaying = false;
public bool Foward = true;
public bool AutoPlay = false;
public bool Loop = false;
public string name;
public int id;
public int FrameCount
{
get
{
return SpriteFrames.Count;
}
}
void Awake()
{
ImageSource = GetComponent();
}
void Start()
{
if (AutoPlay)
{
Play();
}
else
{
IsPlaying = false;
}
}
private void SetSprite(int idx)
{
ImageSource.sprite = SpriteFrames[idx];
//该部分为设置成原始图片大小,如果只需要显示Image设定好的图片大小,注释掉该行即可。
//ImageSource.SetNativeSize();
}
public void Play()
{
IsPlaying = true;
Foward = true;
}
public void PlayReverse()
{
IsPlaying = true;
Foward = false;
}
void Update()
{
if (!IsPlaying || 0 == FrameCount)
{
return;
}
mDelta += Time.deltaTime;
if (mDelta > 1 / FPS)
{
mDelta = 0;
if (Foward)
{
mCurFrame++;
}
else
{
mCurFrame--;
}
if (mCurFrame >= FrameCount)
{
if (Loop)
{
mCurFrame = 0;
}
else
{
IsPlaying = false;
return;
}
}
else if (mCurFrame < 0)
{
if (Loop)
{
mCurFrame = FrameCount - 1;
}
else
{
IsPlaying = false;
return;
}
}
SetSprite(mCurFrame);
}
}
public void Pause()
{
IsPlaying = false;
}
public void Resume()
{
if (!IsPlaying)
{
IsPlaying = true;
}
}
public void Stop()
{
mCurFrame = 0;
SetSprite(mCurFrame);
IsPlaying = false;
}
public void Rewind()
{
mCurFrame = 0;
SetSprite(mCurFrame);
Play();
}
[ContextMenu("ReadPicture")]
public void ReadPicture()
{
string path = "";
for (int n = 0; n < id+1; n++)
{
if (n < 10)
{
path = name + "/" + name + "_0000" + n.ToString();
}
else if (n < 100)
{
path = name + "/" + name + "_000" + n.ToString();
}
else if (n < 1000)
{
path = name + "/" + name + "_00" + n.ToString();
}
SpriteFrames.Add(Resources.Load(path));
}
}
[ContextMenu("clear")]
public void Clear()
{
SpriteFrames.Clear();
}
}