Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放

文章目录

      • 一、前言
      • 二、具体操作
        • 1、准备一张gif图片
        • 2、UniGifImage组件
        • 3、测试
      • 三、结束语

一、前言

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

嗨,大家好,我是新发。我们知道,Unity自身是不支持gif图片的显示,本文,我就给大家演示一下如何在Unity中显示gif图片吧。
本文最终效果:

本文Demo工程已上传到CodeChina,感兴趣的同学可自行下载学习。
地址:https://codechina.csdn.net/linxinfa/UnityShowGifDemo
注:我使用的Unity版本:2020.2.7f1c1 (64-bit)
Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放_第1张图片

二、具体操作

1、准备一张gif图片

Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放_第2张图片
放在StreamingAssets文件夹中。
Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放_第3张图片

2、UniGifImage组件

UniGifImage组件源码参见Demo工程)
创建一张RawImage,挂上UniGifImage组件,此时会自动挂上UniGifImageAspectController组件,如下:
Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放_第4张图片
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组件的参数:
Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放_第5张图片
参数说明:

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

3、测试

为了方便测试,制作一些简单的UI
Unity解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放_第6张图片
写个测试脚本

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

/// 
/// gif显示测试
/// 
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;

    /// 
    /// 锁
    /// 
    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解析和显示/播放GIF图片,支持http url,支持本地file://,支持暂停、继续播放_第7张图片
运行Unity,效果如下:

三、结束语

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

你可能感兴趣的:(Unity3D,unity,gif,image,显示,解析)