IOS工程师都应该用过SDWebImage或者android工程师应该使用过Glide,fresco,Imageloader等,在Unity里面,我按照同样的原理封装了一个ImageLoader 。

原理就是先用一张placeholder来显示图片,等待图片加载,等加载完了之后替换placeholder,第二次加载网络图片时,先判断本地时候已经加载过图片,如果加载过就从本地获取图片,如果没有就去网络上加载。

下面代码:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.IO;public class AsyncImageDownload : MonoBehaviour
{public Sprite placeholder;private static AsyncImageDownload _instance = null;public static AsyncImageDownload GetInstance() { return Instance; }public static AsyncImageDownload Instance{get{if(_instance==null){GameObject obj = new GameObject("AsyncImageDownload");_instance = obj.AddComponent<AsyncImageDownload>();DontDestroyOnLoad(obj);_instance.Init();}return _instance;}}public bool Init(){if (!Directory.Exists(Application.persistentDataPath + "/ImageCache/")){Directory.CreateDirectory(Application.persistentDataPath + "/ImageCache/");}if(placeholder==null){placeholder = Resources.Load("placeholder") as Sprite;}return true;}public void SetAsyncImage(string url, Image image){//开始下载图片前,将UITexture的主图片设置为占位图image.sprite = placeholder;//判断是否是第一次加载这张图片if (!File.Exists(path + url.GetHashCode())){//如果之前不存在缓存文件StartCoroutine(DownloadImage(url, image));}else {StartCoroutine(LoadLocalImage(url, image));}}IEnumerator DownloadImage(string url, Image image){Debug.Log("downloading new image:" + path + url.GetHashCode());//url转换HD5作为名字WWW www = new WWW(url);yield return www;Texture2D tex2d = www.texture;//将图片保存至缓存路径byte[] pngData = tex2d.EncodeToPNG();File.WriteAllBytes(path + url.GetHashCode(), pngData);Sprite m_sprite = Sprite.Create(tex2d, new Rect(0, 0, tex2d.width, tex2d.height), new Vector2(0, 0));image.sprite = m_sprite;}IEnumerator LoadLocalImage(string url, Image image){string filePath = "file:///" + path + url.GetHashCode();Debug.Log("getting local image:" + filePath);WWW www = new WWW(filePath);yield return www;Texture2D texture = www.texture;Sprite m_sprite = Sprite.Create(texture,new Rect(0, 0, texture.width, texture.height), new Vector2(0, 0));image.sprite = m_sprite;}public string path{get{//pc,ios //android :jar:file//return Application.persistentDataPath + "/ImageCache/";}}
}

End

.

Unity 加载网络图片相关推荐

  1. iOS开发swift版异步加载网络图片(带缓存和缺省图片)

    iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存. 异步加载图片的核心代码如下: ...

  2. 【转载】一行代码加载网络图片到ImageView——Android Picasso

    原文链接:一句代码加载网络图片到ImageView--Android Picasso  注意:此处使用下面代码需要先配置一下gradle,下载所需包. 具体操作如下图: compile 'com.sq ...

  3. ios开发多线程篇--异步加载网络图片GCD

    一.异步加载网络图片 1.ATS (1)简介 从iOS9.0开始,如果按照以前的方式写代码,在访问网络的时候 ,会报以下警告信息: App Transport Security has blocked ...

  4. 【Flutter】Image 组件 ( 加载网络图片 | 加载静态图片 | 加载本地图片 | path_provider 插件 )

    文章目录 一.加载网络图片 二.加载静态图片 三.加载本地图片 四.完整代码示例 五.相关资源 一.加载网络图片 参考 [Flutter]Image 组件 ( Image 组件简介 | Image 构 ...

  5. Android Volley完全解析2:使用Volley加载网络图片

    原文链接:http://blog.csdn.net/guolin_blog/article/details/17482165,CSDN 郭霖 在上一篇文章中,我们了解了Volley到底是什么,以及它的 ...

  6. android listview动态加载网络图片不显示,Android Listview异步动态加载网络图片

    Android Listview异步动态加载网络图片 详见: http://blog.sina.com.cn/s/blog_62186b460100zsvb.html 标签: Android SDK ...

  7. Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...

    在android中的加载网络图片是一件十分令人头疼的事情,在网上有着许多关于加载网络图片的开源库,可以让我们十分方便的加载网络图片.在这里我主要介绍一下我自己在使用Volley, Picasso, U ...

  8. android imageview 设置网络图片,ImageView加载网络图片

    android网络加载图片框架Android-Universal-Image-Loader功能非常强大,其开源地址https://github.com/nostra13/Android-Univers ...

  9. 【WPF】wpf image控件加载网络图片不显示问题,

    1.加载网络图片到内存system.drawing.image对象中 2.内存中的image 转Bitmap 再转适合system.windows.controls.image 的BitmapImag ...

最新文章

  1. automaticallyAdjustsScrollViewInsets
  2. php对象+this,PHP $this:当前对象
  3. AndroidStudio安卓原生开发_UI控件_SeekBar_ProgressBar_DataPicker---Android原生开发工作笔记99
  4. keycloak学习
  5. Visual Studio 2008 编译程序时的 mt.exe 返回错误
  6. php图片发送另一台,PHP从一台服务器将图片发送到另一台服务器并保存
  7. linux多线程编程书籍推荐:linux大牛之路从这几本书开始
  8. PC机组成——主板、芯片组与BIOS
  9. 自走棋服务器没有响应,从爆火到凉凉,多多自走棋宣布停服,加入腾讯属于无奈?...
  10. js插件---画图软件wePaint如何使用(插入背景图片,保存图片,上传图片)
  11. ienumerable vs iqueryable异常
  12. [轉]现场:是谁在住救灾帐篷者?
  13. 信息时代的“自由宣言”:处理信息膨胀的21条小贴士
  14. Tableau 快速表计算 显示百分比 / 累计走势
  15. python中编写一个函数求数值x的绝对值(python实验二)
  16. 四旋翼自主飞行器探测跟踪系统补充
  17. Wiremock的使用
  18. pip install --pre -U uiautomator2报错一直安装失败
  19. 镁客网每周硬科技领域投融资汇总(2.24-3.2),地平线机器人晋升估值最高的AI芯片独角兽...
  20. Java 【案例5-3】 模拟用户注册

热门文章

  1. html中a标签设置红色,css 里面,a标签里面的字体颜色怎么调?请详解!谢谢.
  2. 关于SQL语句的执行顺序
  3. Hbuilder+MUI商城app分享
  4. react合成事件和DOM原生事件的区别
  5. 利用腾讯云Python函数实现机场每日自动签到领流量
  6. 中望3D剖面视图使用方法介绍
  7. 富平春天服饰 怎么样呀
  8. 深度剖析 MTI是什么?MTI有什么价值?
  9. git flow的介绍和使用
  10. 极限题型二:求数列极限常见题型