6

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

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

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

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

3) 前两个选项之一,但从资源文件夹加载。

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

干杯,伙计们...

4

2 回答 2

9

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

我们昂贵地使用 Resources.Load() 来拉取资产,它在桌面和移动设备上都表现良好。

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

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

  • 仅在用户忙于浏览每本书的第一页时加载您需要显示的内容并实现后台进程以获取其他内容。这将避免阻塞 UI 太久。
  • 优化图像以减小文件大小。使用 tinypng,如果您需要透明图像,或坚持使用压缩的 JPG
  • 尽可能使用 2 图像的幂。这应该会稍微加快运行时处理。

ath。

于 2013-07-02T14:58:13.257 回答
4

杰罗姆关于资源的好回答。要为将来搜索有关 AssetBundles 添加一些附加信息,这里有两种情况:

你的游戏太大了

比如说,你有大量的纹理,而你的 iOS 游戏超过 100 mb——这意味着 Apple 会向用户显示警告并阻止他们通过蜂窝网络下载。资源将无济于事,因为该文件夹中的所有内容都与应用程序捆绑在一起。

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

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

替代方案:您正在为 iPhone 和 iPad 开发。出于与上述相同的原因,您尽可能缩小您的作品以达到 iPhone 的 100 mb 限制。但现在这款游戏在 iPad 上看起来很糟糕。做什么?

解决方案:您创建一个包含两个变体的资产包。一种用于具有低分辨率艺术品的手机,一种用于具有高分辨率艺术品的平板电脑。在这种情况下,资产包可以随游戏一起提供或发送到服务器。在运行时,您可以选择正确的变体并从资产包中加载,从而获得适当的艺术品,而无需到处使用 if/else。

话虽如此,资产包使用起来更加复杂,文档记录不充分,而且 Unity 的演示有时无法正常工作。所以认真评估你是否需要它们。

于 2017-02-16T01:05:53.460 回答