Unity 加载网络图片
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 加载网络图片相关推荐
- iOS开发swift版异步加载网络图片(带缓存和缺省图片)
iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存. 异步加载图片的核心代码如下: ...
- 【转载】一行代码加载网络图片到ImageView——Android Picasso
原文链接:一句代码加载网络图片到ImageView--Android Picasso 注意:此处使用下面代码需要先配置一下gradle,下载所需包. 具体操作如下图: compile 'com.sq ...
- ios开发多线程篇--异步加载网络图片GCD
一.异步加载网络图片 1.ATS (1)简介 从iOS9.0开始,如果按照以前的方式写代码,在访问网络的时候 ,会报以下警告信息: App Transport Security has blocked ...
- 【Flutter】Image 组件 ( 加载网络图片 | 加载静态图片 | 加载本地图片 | path_provider 插件 )
文章目录 一.加载网络图片 二.加载静态图片 三.加载本地图片 四.完整代码示例 五.相关资源 一.加载网络图片 参考 [Flutter]Image 组件 ( Image 组件简介 | Image 构 ...
- Android Volley完全解析2:使用Volley加载网络图片
原文链接:http://blog.csdn.net/guolin_blog/article/details/17482165,CSDN 郭霖 在上一篇文章中,我们了解了Volley到底是什么,以及它的 ...
- android listview动态加载网络图片不显示,Android Listview异步动态加载网络图片
Android Listview异步动态加载网络图片 详见: http://blog.sina.com.cn/s/blog_62186b460100zsvb.html 标签: Android SDK ...
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...
在android中的加载网络图片是一件十分令人头疼的事情,在网上有着许多关于加载网络图片的开源库,可以让我们十分方便的加载网络图片.在这里我主要介绍一下我自己在使用Volley, Picasso, U ...
- android imageview 设置网络图片,ImageView加载网络图片
android网络加载图片框架Android-Universal-Image-Loader功能非常强大,其开源地址https://github.com/nostra13/Android-Univers ...
- 【WPF】wpf image控件加载网络图片不显示问题,
1.加载网络图片到内存system.drawing.image对象中 2.内存中的image 转Bitmap 再转适合system.windows.controls.image 的BitmapImag ...
最新文章
- automaticallyAdjustsScrollViewInsets
- php对象+this,PHP $this:当前对象
- AndroidStudio安卓原生开发_UI控件_SeekBar_ProgressBar_DataPicker---Android原生开发工作笔记99
- keycloak学习
- Visual Studio 2008 编译程序时的 mt.exe 返回错误
- php图片发送另一台,PHP从一台服务器将图片发送到另一台服务器并保存
- linux多线程编程书籍推荐:linux大牛之路从这几本书开始
- PC机组成——主板、芯片组与BIOS
- 自走棋服务器没有响应,从爆火到凉凉,多多自走棋宣布停服,加入腾讯属于无奈?...
- js插件---画图软件wePaint如何使用(插入背景图片,保存图片,上传图片)
- ienumerable vs iqueryable异常
- [轉]现场:是谁在住救灾帐篷者?
- 信息时代的“自由宣言”:处理信息膨胀的21条小贴士
- Tableau 快速表计算 显示百分比 / 累计走势
- python中编写一个函数求数值x的绝对值(python实验二)
- 四旋翼自主飞行器探测跟踪系统补充
- Wiremock的使用
- pip install --pre -U uiautomator2报错一直安装失败
- 镁客网每周硬科技领域投融资汇总(2.24-3.2),地平线机器人晋升估值最高的AI芯片独角兽...
- Java 【案例5-3】 模拟用户注册