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(); } }