Unity3d UGUI序列帧动画
代码
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using System; [RequireComponent(typeof(Image))] public class UGUISpriteAnimation : MonoBehaviour { private Image ImageSource; private int mCurFrame = 0; private float mDelta = 0; public float FPS = 5; public List<Sprite> SpriteFrames; public bool IsPlaying = false; public bool Foward = true; public bool AutoPlay = false; public bool Loop = false; public int FrameCount { get { return SpriteFrames.Count; } } void Awake() { ImageSource = GetComponent<Image>(); } void Start() { if (AutoPlay) { Play(); } else { IsPlaying = false; } } private void SetSprite(int idx) { ImageSource.sprite = SpriteFrames[idx]; 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(); } }