前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次Unity3D中WWW加载本地图片很慢的BUG

记一次Unity3D中WWW加载本地图片很慢的BUG

作者头像
IT自学不成才
发布2019-01-08 11:20:46
4.1K0
发布2019-01-08 11:20:46
举报

记一次Unity3D中WWW加载本地图片很慢的BUG

2017-05-11 by Liuqingwen | Tags: Unity3D | Hits

事情是这样的,昨天有朋友在群里询问一个 Unity3D 本地图片资源加载相关的问题:“切换图片的时候,要等3,4秒才能显示切换的图片”,今天上线后看到了,然后自己也做了测试,发现并没有重现这个问题,如是两个人讨论了一番。

一、问题

需求大概是这样:从本地文件中加载图片到游戏中,然后显示到界面上。朋友的代码大概是这样的:

blush
blush
void Start () 
{
	string file = "file://E:/file/path/to/image.jpg";
	StartCoroutine(LoadImage(file, imageCard));
}

public IEnumerator LoadImage(string path, Image image)
{
	WWW www = new WWW (path);
	while (! www.isDone)
	{
		Debug.Log (DateTime.Now);
		yield return www;
		Debug.Log (DateTime.Now);
	}
	Texture2D texture = www.texture;
	Sprite sp = Sprite.Create (texture, 
        new Rect (0, 0, texture.width, texture.height), 
        new Vector2 (0.5f, 0.5f));
	image.sprite = sp;
}

运行后的控制台打印的结果显示加载本地图片的过程中花了3秒钟时间:

5/11/2017 9:49:43 PM
UnityEngine.Debug:Log(Object)
5/11/2017 9:49:46 PM
UnityEngine.Debug:Log(Object)

二、解决

显然上面的 3 秒钟时间是不符合逻辑的,即使是加载远程服务器的大图估计也花不了这么长的时间,因为没有做过 Unity3D 的开发,我的第一反应就是去官网找了 WWW 的相关用法:

You can inspect the isDone property to see if the download has completed or yield the download object to automatically wait until it is (without blocking the rest of the game). When using file protocol on Windows and Windows Store Apps for accessing local files, you have to specify file:/// (with three slashes).

所以根据以上的建议我告诉朋友试试这两种方案:

  • 用了 isDone 就不用 yield 了,也就是删除 while(! www.isDone)
  • 改图片路径的字符串 file://file:///

很显然,结果是无用功,以上只是逻辑问题,不可能会引起长达 3 秒的加载时间。接着我自己在电脑上做了测试,莫名的发现,不管怎样,我的图片加载很顺畅!这又是什么鬼?

joy
joy

既然软件没问题,马上我怀疑上了硬件问题,朋友马上拿来固态硬盘一试!————结果是悲哀的,固态硬盘上花费了 4 秒钟的时间!

joy
joy

只能 Google 一下了,果然有同学也遇到过这个问题:www-Class for loading local texture is very slow ,高手的解释大意是:只要设置了网络的 gateway ,但是 Unity 又没有真正的连接网络,那么这个卡 3-4 秒的问题就会出现!太神奇了啊!有木有!

sweat
sweat

所以,最后的解决方法肯定是拔掉网络了!哈哈,不过,我朋友并不是这样解决问题的,而是:卸载 Unity3D 并砸了电脑!?,搞错了是关闭了他安装的虚拟机!因为装了虚拟机后有两个网络适配器导致!

joy
joy

三、总结

真是奇怪啊,不过还是学到了经验,至少了解了一下 WWW 的用法。希望这个解决方法对那些刚遇到类似问题的新手有一定的借鉴作用。

参考资料: www-Class for loading local texture is very slow: http://answers.unity3d.com/questions/623448/www-class-for-loading-local-texture-is-very-slow.html?sort=votes WWW Script Reference: https://docs.unity3d.com/ScriptReference/WWW.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 记一次Unity3D中WWW加载本地图片很慢的BUG
    • 一、问题
      • 二、解决
        • 三、总结
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档