美文网首页VR圈
Unity3d 5.3.4 UGUI Image 实现序列帧动画

Unity3d 5.3.4 UGUI Image 实现序列帧动画

作者: 老掌门CEO | 来源:发表于2016-07-18 23:00 被阅读4697次

    一直没有写博客,最近项目要求添加序列帧动画,之前一直用NGUI,只做起来非常方便。刚接触UGU几天的时间,所以写的简单些,在此做一下记录,以后防止遗忘。

    首先,贴上代码(不是我写的):

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

        {

        }

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

        }

    }

    在学习u3d的过程中,或者说在学习任何一门技术的时候,想要快速掌握,最重要的方法就是实践。之前做东西,遇到困难的地方总是想着避开,现在却不这么想,因为任何技术都不会难倒你,难倒了你的永远是自己的恐惧。所以建议大家在学习新技术的时候,不要想很多,拿到源码先搞几遍,不停的实践,几遍之后,你会发现也就这么回事。

    我的简书文章里记录的大部分是vr,游戏相关的知识,大家可以看看,有任何不正确的地方,还望大家指正。

    相关文章

      网友评论

        本文标题:Unity3d 5.3.4 UGUI Image 实现序列帧动画

        本文链接:https://www.haomeiwen.com/subject/hsgfdttx.html