【游戏开发实战】Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放

一、前言

点关注不迷路,持续输出Unity干货文章。

嗨,大家好,我是新发。我们知道,Unity自身是不支持gif图片的显示,本文,我就给大家演示一下如何在Unity中显示gif图片吧。
本文最终效果:
在这里插入图片描述
本文Demo工程已上传到CodeChina,感兴趣的同学可自行下载学习。
地址:https://codechina.csdn.net/linxinfa/UnityShowGifDemo
注:我使用的Unity版本:2020.2.7f1c1 (64-bit)
在这里插入图片描述

二、具体操作

1、准备一张gif图片

在这里插入图片描述
放在StreamingAssets文件夹中。
在这里插入图片描述

2、UniGifImage组件

UniGifImage组件源码参见Demo工程)
创建一张RawImage,挂上UniGifImage组件,此时会自动挂上UniGifImageAspectController组件,如下:
在这里插入图片描述
UniGifImage组件提供了以下几个主要接口:

// 设置gif,内部会调用协程SetGifFromUrlCoroutine,url支持http/https和本地路径,本地路径默认从StreamingAssets文件夹读取
public void SetGifFromUrl(string url, bool autoPlay = true)
// 设置gif
public IEnumerator SetGifFromUrlCoroutine(string url, bool autoPlay = true)
// 播放
public void Play()
// 停止
public void Stop()
// 暂停
public void Pause()
// 继续
public void Resume()

设置一下UniGifImage组件的参数:
在这里插入图片描述
参数说明:

参数说明
RawImage要渲染gif的目标RawImage
ImgAspectCtrlgif尺寸适配器,会根据RawImage适配最终gif显示的尺寸
FilterMode纹理的过滤模式
WrapMode纹理的环绕模式
LoadOnStart是否在脚本Start时就加载gif
LoadOnStartUrl脚本Start时加载的gif的url地址
ROtateOnLoading是否在加载时旋转图片
OutputDebgLog是否输出调试日志
3、测试

为了方便测试,制作一些简单的UI
在这里插入图片描述
写个测试脚本

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// gif显示测试
/// </summary>
public class UniGifTest : MonoBehaviour
{
    public InputField gifUrlInput;
    public UniGifImage gifImage;
    public Button loadBtn;
    public Button playBtn;
    public Button stopBtn;
    public Button pauseBtn;
    public Button resumeBtn;

    /// <summary>
    /// 锁
    /// </summary>
    private bool m_mutex;

    private void Start()
    {
        loadBtn.onClick.AddListener(() => 
        {
            if (m_mutex || gifImage == null || string.IsNullOrEmpty(gifUrlInput.text))
            {
                return;
            }

            m_mutex = true;
            StartCoroutine(ViewGifCoroutine());
        });

        playBtn.onClick.AddListener(() => { gifImage.Play(); });
        stopBtn.onClick.AddListener(() => { gifImage.Stop(); });
        pauseBtn.onClick.AddListener(() => { gifImage.Pause(); });
        resumeBtn.onClick.AddListener(() => { gifImage.Resume(); });
    }

    private IEnumerator ViewGifCoroutine()
    {
        yield return StartCoroutine(gifImage.SetGifFromUrlCoroutine(gifUrlInput.text));
        m_mutex = false;
    }
}

创建一个UniGifTest空物体,挂上UniGifTest脚本,赋值参数对象,如下:
在这里插入图片描述
运行Unity,效果如下:
在这里插入图片描述

三、结束语

完毕。
喜欢Unity的同学,不要忘记点击关注,如果有什么Unity相关的技术难题,也欢迎留言或私信~

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值