所以,我已经在论坛上关于AssetBundles和Unity 3D中的Resources文件夹做了一些阅读,我无法找到解决我面临的问题的最佳解决方案。这是问题所在:
我有一个专为独立设计的程序,可以加载充满.png和.jpg图像的“书籍”。每次程序启动时,页面都是相同的。在任何“书”的场景开始时,它使用www.texture和路径一次加载所有这些图像。但是,我现在意识到,这可能是一种在运行时访问内容的非高效方法 - 它很慢!这意味着当场景开始并且书籍的页面图像加载(在非传奇的计算机上)时,用户无法做任何事情5-20秒。所以,我无法弄清楚这三件事中哪一件最快:
1)每本书加载一个资产包(比如20个纹理,每个1 MB)。
2)每页加载一个资产包(每个1 MB)。
3)前两个选项中的任何一个,但是从资源文件夹加载。
哪一个会更快,为什么?我知道资产包是由统一打包的,但这是否意味着里面的纹理会在加载时被预压缩并更容易在内存中?资源文件夹是否会减少加载时间?是什么赋予了?据我所知,资源文件夹加载到缓存中 - 但它是独立播放器正常使用的缓存吗?或者是这个额外的,未使用的空间?我想另一个问题是,我不确定从内存加载东西和将它们存储在缓存中之间有什么区别。
欢呼,伙计们......
答案 0 :(得分:9)
资源文件夹是捆绑的托管资产。这意味着它们将按照您在IDE中应用的设置由Unity压缩。因此,它们在运行时加载是有效的。您可以为每个平台定制压缩,这将进一步优化性能。
我们花费大量资源使用Resources.Load()来提取资产,它在桌面和移动设备上都表现良好。
还有一个名为StreamingAssets的特殊文件夹,您可以使用它来放置捆绑的非托管资产。这是我们在运行时放置我们想要播放的视频的地方,但不希望Unity将它们转换为默认的ogg编解码器。在移动设备上,这些在原生视频播放器中播放您还可以将图像放在那里,加载它们就像使用WWW类一样。慢,因为Unity需要在加载时清理和压缩图像。
如上所述,由于处理资产的开销,加载WWW会变慢。但您可以从服务器或应用程序“沙箱”外部提取数据。
ATH。
答案 1 :(得分:4)
杰罗姆关于资源的好回答。要为将来有关AssetBundles的搜索添加一些其他信息,可以使用以下两种方案:
您的游戏太大
你有大量的纹理,你的iOS游戏超过100 MB - 这意味着Apple会向用户发出警告并阻止他们通过手机下载。资源不会有帮助,因为该文件夹中的所有内容都与应用程序捆绑在一起。
解决方案:将首次运行时绝对不需要的艺术品移动到资产包中。构建捆绑包,将它们上传到某个服务器,然后根据需要在运行时下载它们。现在你的游戏规模要小得多,并且没有任何可怕的警告。
您需要针对不同平台的不同版本的艺术作品
备选方案:您正在为iPhone和iPad开发。出于与上述相同的原因,您可以尽可能地缩小图片,以达到iPhone的100 MB限制。但现在iPad上的游戏看起来很糟糕。怎么办?
解决方案:您创建一个包含两个变体的资产包。一个用于低分辨率艺术品的手机,另一个用于高分辨率艺术品的平板电脑。在这种情况下,资产包可以随游戏一起发送或发送到服务器。在运行时,您从资产包中选择正确的变量和负载,获取相应的图稿,而不必在任何地方使用if / else。
尽管如此,资产包的使用更加复杂,文档记录也很少,Unity的演示有时也无法正常工作。所以要认真评估你是否需要它们。