游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:791

当前位置:游戏蛮牛 技术专区 教程分享

查看: 530|回复: 4

[自学总结] Unity 播放gif

[复制链接]  [移动端链接]
6蛮牛粉丝
1403/1500
排名
1681
昨日变化

16

主题

140

帖子

1403

积分

Rank: 6Rank: 6Rank: 6

UID
172953
好友
1
蛮牛币
3597
威望
0
注册时间
2017-2-15
在线时间
477 小时
最后登录
2018-10-19
发表于 2018-5-8 10:52:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

感谢作者,拿来收藏下,原文转自:Unity 播放gif  


unity自身是不支持gif图片的播放,通过C#system.Drawing.dll 把gif整合到图集里 一张一张播放达到动态图的效果

首先打开你打开你当前使用unity的文件位置->Data->Mono->lib->mono->2.0->System.Drawing.dll 复制到你新建的工程的Assets目录下

这个System.Drawing.dll必须文件夹里的  这个继承了MonoBehaviour 其它的地方无法using到


随便找个.gif动态图片丢到StreamingAssets文件下

工程设置:


效果图;


脚本:


[csharp] view plain copy



  • using UnityEngine;  
  • using System.Collections;  
  • using System.Drawing;  
  • using System.Collections.Generic;  
  • using UnityEngine.UI;  
  • using System.Drawing.Imaging;  
  • using System.IO;  
  • using System;  
  • public class aaaaa : MonoBehaviour {  
  •     public UnityEngine.UI.Image Im;  
  •     public GameObject[] Ims;  
  •     [SerializeField]//序列化域  
  •     private float fps=30f;  
  •     private List<Texture2D> tex2DList = new List<Texture2D> ();  
  •     private float time;  
  •     Bitmap mybitmp;  
  •     void Start () {  
  •         System.Drawing.Image image = System.Drawing.Image.FromFile (Application.streamingAssetsPath + "/loading.gif");  
  •         tex2DList = MyGif (image);  
  •     }  
  •       
  •     // Update is called once per frame  
  •     void Update () {  
  •         if (tex2DList.Count > 0)  
  •         {  
  •             time += Time.deltaTime;  
  •             int index = (int)(time * fps) % tex2DList.Count;  
  •             if (Im != null)  
  •             {  
  •                 Im.sprite = Sprite.Create(tex2DList[index], new Rect(0, 0, tex2DList[index].width, tex2DList[index].height), new Vector2(0.5f, 0.5f));  
  •             }  
  •             if (Ims.Length != 0)  
  •             {  
  •                 for (int i = 0; i < Ims.Length; i++)  
  •                     Ims.GetComponent<Renderer>().material.mainTexture = tex2DList[index];  
  •   
  •             }  
  •         }  
  •     }  
  •     private List<Texture2D> MyGif(System.Drawing.Image image){  
  •       
  •         List<Texture2D> tex = new List<Texture2D> ();  
  •         if(image!=null){  
  •   
  •             Debug.Log ("图片张数:"+image.FrameDimensionsList.Length);  
  •             FrameDimension frame = new FrameDimension (image.FrameDimensionsList[0]);  
  •             int framCount = image.GetFrameCount (frame);//获取维度帧数  
  •             for(int i=0;i<framCount;++i){  
  •   
  •                 image.SelectActiveFrame (frame,i);  
  •                 Bitmap framBitmap = new Bitmap (image.Width,image.Height);  
  •                 using (System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage (framBitmap)) {  
  •                     graphic.DrawImage (image,Point.Empty);  
  •                 }  
  •                 Texture2D frameTexture2D = new Texture2D (framBitmap.Width,framBitmap.Height,TextureFormat.ARGB32,true);  
  •                 frameTexture2D.LoadImage (Bitmap2Byte(framBitmap));  
  •                 tex.Add (frameTexture2D);  
  •             }  
  •         }  
  •         return tex;  
  •     }  
  •     private byte[] Bitmap2Byte(Bitmap bitmap)  
  •     {  
  •         using (MemoryStream stream = new MemoryStream())  
  •         {  
  •             // 将bitmap 以png格式保存到流中  
  •             bitmap.Save(stream, ImageFormat.Png);  
  •             // 创建一个字节数组,长度为流的长度  
  •             byte[] data = new byte[stream.Length];  
  •             // 重置指针  
  •             stream.Seek(0, SeekOrigin.Begin);  
  •             // 从流读取字节块存入data中  
  •             stream.Read(data, 0, Convert.ToInt32(stream.Length));  
  •             return data;  
  •         }  
  •     }  
  • }  




回复

使用道具 举报

7日久生情
1912/5000
排名
4292
昨日变化
3

0

主题

1335

帖子

1912

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
267381
好友
6
蛮牛币
3205
威望
0
注册时间
2018-2-1
在线时间
257 小时
最后登录
2018-10-6
发表于 2018-5-12 09:23:54 | 显示全部楼层
谢谢分享

回复

使用道具 举报

3偶尔光临
268/300
排名
10468
昨日变化
4

0

主题

75

帖子

268

积分

Rank: 3Rank: 3Rank: 3

UID
74753
好友
0
蛮牛币
29
威望
0
注册时间
2015-2-14
在线时间
99 小时
最后登录
2018-10-19
发表于 2018-5-14 10:03:13 | 显示全部楼层
unity现在不支持gif图片的播放了????????

回复 支持 反对

使用道具 举报

4四处流浪
324/500
排名
6212
昨日变化
6

0

主题

41

帖子

324

积分

Rank: 4

UID
111073
好友
0
蛮牛币
545
威望
0
注册时间
2015-6-29
在线时间
79 小时
最后登录
2018-10-8
发表于 2018-5-29 10:12:16 | 显示全部楼层
能分享一下样例工程吗?非常简单的那种就行。
[发帖际遇]: 一个袋子砸在了 weiyuliang 头上,weiyuliang 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
2639/5000
排名
663
昨日变化

30

主题

562

帖子

2639

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
124569
好友
25
蛮牛币
6754
威望
0
注册时间
2015-10-4
在线时间
789 小时
最后登录
2018-10-19
发表于 2018-7-3 08:15:33 | 显示全部楼层
好像能用得到,收藏一下,感谢分享

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表