美文网首页
Unity序列帧图片自动播放

Unity序列帧图片自动播放

作者: 玄策丶 | 来源:发表于2021-10-11 15:48 被阅读0次
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
/****************************************************
作者:cg
功能:图片序列帧动画
*****************************************************/
public class SpriteImgAnm : MonoBehaviour
{
    [Header("自动播放")]
    public bool PlayAwake;
    [Header("循环播放")]
    public bool Loop = false;
    [Tooltip("序列帧的图片")]
    [SerializeField]
    private Sprite[] m_frames;
    [Header("播放速度")]
    public float Speed = 0.05f;
    [Header("插入事件位置")]
    public int ActionFrame = -1;
    [SerializeField]
    private UnityEvent m_frameEvent;
 
    private SpriteRenderer _container;
    private Image _containerImg;
    private int _ticked;
    private float _time;
    private bool _doAnim;
 
    public bool DoAnim { get { return _doAnim; } set { _doAnim = value; } }
 
    private void Awake()
    {
        _container = GetComponent<SpriteRenderer>();
        if (_container == null)
        {
            _containerImg = GetComponent<Image>();
        }
        Init();
    }
 
    private void Init()
    {
        _ticked = 0;
        _time = 0;
        _doAnim = PlayAwake;
        SetContainerSprite(m_frames[0]);
    }
    private void SetContainerSprite(Sprite sprite)
    {
        if (_container != null)
            _container.sprite = sprite;
        else
            _containerImg.sprite = sprite;
    }
 
    public void Play()
    {
        _ticked = 0;
        _time = 0;
        _doAnim = true;
        SetContainerSprite(m_frames[0]);
    }
 
    public void Pause()
    {
        _doAnim = false;
    }
 
    public void Resume()
    {
        _doAnim = true;
    }
 
    public void Stop()
    {
        _ticked = 0;
        _time = 0;
        _doAnim = false;
        SetContainerSprite(m_frames[0]);
    }
 
    void Update()
    {
        if (_doAnim)
        {
            _time += Time.deltaTime;
            if (_time > Speed)
            {
                _ticked++;
                if (_ticked == m_frames.Length)
                {
                    if (Loop)
                    {
                        _ticked = 0;
                    }
                    else
                    {
                        _ticked = m_frames.Length - 1;
                    }
                }
                _time = 0;
 
                if (_ticked == ActionFrame)
                    m_frameEvent.Invoke();
 
                SetContainerSprite(m_frames[_ticked]);
            }
        }
    }
}

相关文章

  • Unity序列帧图片自动播放

  • Unity Shader: 一个简单的(规则化)序列帧动画(性能

    接前文: Unity Shader: 一个简单的(规则化)序列帧动画(基础显示)[https://www.jian...

  • Tom猫1

    -(void)viewDidLoad [super viewDidLoad];{ //序列帧动画要播放的图片数组 ...

  • Unity播放序列帧

    在U3D中播放序列帧应该算是一个非常常见的需求了,基本做过一些正式项目的朋友或多或少都会遇到,包括我自己,所以自己...

  • 无标题文章

    //序列帧动画要播放的图片数组 // imageView.animationImages //动画时长 // im...

  • Unity 播放序列帧动画

    使用方法只需要将脚本挂载UI上,将图片拖拽到数组里即可.

  • 会发出声音的商标?

    请您接收以下图片!会自动播放声音哦! 看见这些图片,脑海中就会“自动播放”与之相符的声音。然而,你知道吗?这些声音...

  • 序列帧动画

    昨天,一个妹子问我,Unity实现序列帧动画,然后说他们老师说要结合Animation,今天想了一下,一起进步,嘿...

  • Unity 2DSprite

    总体功能介绍: 下面就是2DSprite属性图 分割图片: 如果你想把一张图片分割出多个小图片,用来做序列帧动画....

  • 2-UIImageView动画(序列帧动画)

    序列帧:肉眼可以接受最高每秒20帧以内的动画 属性: 设置 animation 图片self.imageView....

网友评论

      本文标题:Unity序列帧图片自动播放

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