开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:762

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

查看: 168|回复: 2

[自学总结] Unity 播放gif

[复制链接]  [移动端链接]
5熟悉之中
998/1000
排名
2385
昨日变化
10

11

主题

117

帖子

998

积分

Rank: 5Rank: 5

UID
172953
好友
1
蛮牛币
2938
威望
0
注册时间
2017-2-15
在线时间
340 小时
最后登录
2018-5-24

迈向小康

发表于 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;  
  •         }  
  •     }  
  • }  




回复

使用道具 举报

6蛮牛粉丝
1412/1500
排名
6261
昨日变化
94

0

主题

1049

帖子

1412

积分

Rank: 6Rank: 6Rank: 6

UID
267381
好友
2
蛮牛币
2296
威望
0
注册时间
2018-2-1
在线时间
175 小时
最后登录
2018-5-25

迈向小康

发表于 2018-5-12 09:23:54 | 显示全部楼层
谢谢分享

回复

使用道具 举报

3偶尔光临
224/300
排名
10761
昨日变化
11

0

主题

68

帖子

224

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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