文章目录
一、前言二、具体操作1、准备一张gif图片2、UniGifImage组件3、测试
三、结束语
一、前言
点关注不迷路,持续输出Unity干货文章。
嗨,大家好,我是新发。我们知道,Unity自身是不支持gif图片的显示,本文,我就给大家演示一下如何在Unity中显示gif图片吧。 本文最终效果: 本文Demo工程已上传到CodeChina,感兴趣的同学可自行下载学习。 地址:https://codechina.csdn.net/linxinfa/UnityShowGifDemo 注:我使用的Unity版本:2020.2.7f1c1 (64-bit)。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407104511440.png?x-oss-process=/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnhpbmZh,size_16,color_FFFFFF,t_70)
二、具体操作
1、准备一张gif图片
放在StreamingAssets文件夹中。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407101443886.png?x-oss-process=/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnhpbmZh,size_16,color_FFFFFF,t_70)
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的目标RawImageImgAspectCtrlgif尺寸适配器,会根据RawImage适配最终gif显示的尺寸FilterMode纹理的过滤模式WrapMode纹理的环绕模式LoadOnStart是否在脚本Start时就加载gifLoadOnStartUrl脚本Start时加载的gif的url地址ROtateOnLoading是否在加载时旋转图片OutputDebgLog是否输出调试日志
3、测试
为了方便测试,制作一些简单的UI。 写个测试脚本
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,效果如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407101149235.gif)
三、结束语
完毕。 喜欢Unity的同学,不要忘记点击关注,如果有什么Unity相关的技术难题,也欢迎留言或私信~
|