【Unity3d】简单的UGUI序列帧播放

UGUI的Image配合Animation可以很方便的实现序列帧播放的功能。我们也能自己写一个播放脚本来控制序列帧的播放,这样就可以方便地在特定帧数插入一些事件。

设计一个SpriteAnimatior脚本:

public class SpriteAnimator : MonoBehaviour
{

    public bool playAwake;
    public Sprite[] frames;
    public float speed = 0.05f;
    public int actionFrame = -1f;
    public UnityEvent frameEvent;

    private Image container;
    private int ticked;
    private float time;
    private bool doAnim;

    private void Awake()
    {
        container= GetComponent<Image>();
        Init();
    }

    private void Init()
    {
        ticked = 0;
        time = 0;
        doAnim = playAwake;
        container.sprite = frames[0];
    }

    public void Play()
    {
        ticked = 0;
        time = 0;
        doAnim = true;
        container.sprite = frames[0];
    }

    public void Pause()
    {
        doAnim = false;
    }

    public void Resume()
    {
        doAnim = true;
    }

    public void Stop()
    {
        ticked = 0;
        time = 0;
        doAnim = false;
        container.sprite = frames[0];
    }

    void Update()
    {
        if (doAnim)
        {
            time += Time.deltaTime;
            if (time > speed)
            {
                ticked++;
                if (ticked == frames.Length)
                    ticked = 0;
                else
                    time = 0;

                if(ticked == actionFrame)
                    frameEvent.Invoke();

                container.sprite = frames[ticked];
            }
        }
    }
}

将脚本挂载到物体上:
- playAwake:自动播放
- frames:序列帧,如果有很多帧数可以从resources或者其他地方加载
- speed:播放速度
- actionFrame:执行事件的帧数,也可以做一个数组执行多个事件
- frameEvent:特定帧数执行的事件,如果需要有多个事件可以与actionFrame一同设计一个class或者struct

调用play方法即可播放。如果有循环与否或者其他需求,只需在执行到特定帧数的时候添加一个判断即可。

by:蒋志杰

猜你喜欢

转载自blog.csdn.net/dark00800/article/details/78086312