Unity 3D:Asset Bundles vs. Resources文件夹vs www.Texture

时间:2013-07-02 10:22:51

标签: caching resources unity3d textures assetbundle

所以,我已经在论坛上关于AssetBundles和Unity 3D中的Resources文件夹做了一些阅读,我无法找到解决我面临的问题的最佳解决方案。这是问题所在:

我有一个专为独立设计的程序,可以加载充满.png和.jpg图像的“书籍”。每次程序启动时,页面都是相同的。在任何“书”的场景开始时,它使用www.texture和路径一次加载所有这些图像。但是,我现在意识到,这可能是一种在运行时访问内容的非高效方法 - 它很慢!这意味着当场景开始并且书籍的页面图像加载(在非传奇的计算机上)时,用户无法做任何事情5-20秒。所以,我无法弄清楚这三件事中哪一件最快:

1)每本书加载一个资产包(比如20个纹理,每个1 MB)。

2)每页加载一个资产包(每个1 MB)。

3)前两个选项中的任何一个,但是从资源文件夹加载。

哪一个会更快,为什么?我知道资产包是由统一打包的,但这是否意味着里面的纹理会在加载时被预压缩并更容易在内存中?资源文件夹是否会减少加载时间?是什么赋予了?据我所知,资源文件夹加载到缓存中 - 但它是独立播放器正常使用的缓存吗?或者是这个额外的,未使用的空间?我想另一个问题是,我不确定从内存加载东西和将它们存储在缓存中之间有什么区别。

欢呼,伙计们......

2 个答案:

答案 0 :(得分:9)

资源文件夹是捆绑的托管资产。这意味着它们将按照您在IDE中应用的设置由Unity压缩。因此,它们在运行时加载是有效的。您可以为每个平台定制压缩,这将进一步优化性能。

我们花费大量资源使用Resources.Load()来提取资产,它在桌面和移动设备上都表现良好。

还有一个名为StreamingAssets的特殊文件夹,您可以使用它来放置捆绑的非托管资产。这是我们在运行时放置我们想要播放的视频的地方,但不希望Unity将它们转换为默认的ogg编解码器。在移动设备上,这些在原生视频播放器中播放您还可以将图像放在那里,加载它们就像使用WWW类一样。慢,因为Unity需要在加载时清理和压缩图像。

如上所述,由于处理资产的开销,加载WWW会变慢。但您可以从服务器或应用程序“沙箱”外部提取数据。

  • 仅在用户忙于浏览每本书的第一页时,仅加载您需要显示的内容并实施后台进程以获取其他内容。这样可以避免过长时间阻止UI。
  • 优化图像以减小文件大小。如果您需要透明图像,请使用tinypng,或坚持使用压缩的JPG
  • 尽可能尝试使用Power of 2图像。这应该可以加快运行时处理速度。

ATH。

答案 1 :(得分:4)

杰罗姆关于资源的好回答。要为将来有关AssetBundles的搜索添加一些其他信息,可以使用以下两种方案:

您的游戏太大

你有大量的纹理,你的iOS游戏超过100 MB - 这意味着Apple会向用户发出警告并阻止他们通过手机下载。资源不会有帮助,因为该文件夹中的所有内容都与应用程序捆绑在一起。

解决方案:将首次运行时绝对不需要的艺术品移动到资产包中。构建捆绑包,将它们上传到某个服务器,然后根据需要在运行时下载它们。现在你的游戏规模要小得多,并且没有任何可怕的警告。

您需要针对不同平台的不同版本的艺术作品

备选方案:您正在为iPhone和iPad开发。出于与上述相同的原因,您可以尽可能地缩小图片,以达到iPhone的100 MB限制。但现在iPad上的游戏看起来很糟糕。怎么办?

解决方案:您创建一个包含两个变体的资产包。一个用于低分辨率艺术品的手机,另一个用于高分辨率艺术品的平板电脑。在这种情况下,资产包可以随游戏一起发送或发送到服务器。在运行时,您从资产包中选择正确的变量和负载,获取相应的图稿,而不必在任何地方使用if / else。

尽管如此,资产包的使用更加复杂,文档记录也很少,Unity的演示有时也无法正常工作。所以要认真评估你是否需要它们。