当前位置 博文首页 > unity工具人的博客:unity ugui序列帧动画

    unity工具人的博客:unity ugui序列帧动画

    作者:[db:作者] 时间:2021-07-06 12:34

    ui序列帧动画,不停刷新ui图片以达到动画效果

    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();
        }
    }
    
    cs
    下一篇:没有了