2

在提出问题之前,我将解释我需要什么样的要求。在我的游戏中,玩它需要很多纹理。由于这一点以及 ipa 大小(iOS)的限制,我认为使用assetbundle 是必须的。因为现有的代码实现,我创建了资产包,1 个资产包用于 1 个图像。例如:我有 100 个图像,然后我将创建 100 个资产包(其中 mainasset 将是纹理),具有相同的名称。

我希望我的游戏可以离线在用户第一次下载所有需要的资产包所以如果用户第一次玩或者下载我的游戏的更新版本,游戏会被强制进入特殊场景,下载所有需要的assetbundle,之后用户可以在没有互联网连接的情况下玩游戏。

我认为有两种方法可以下载这些资产包:

  1. 正常方式:我将所有 100 个资产包放在我的服务器中,并放入 1 个 xml 文件,其中包含所有资产包信息及其版本。在特殊场景下,游戏会下载xml文件,并从中下载100个assetbundles WWW.LoadFromCacheOrDownload。目的只是将所需的资产包存储到游戏缓存中。全部下载成功后就可以离线玩了,如果游戏需要加载assetbundle,那我就再调用一次WWW.LoadFromCacheOrDownload,因为还在缓存中,所以可以离线玩。当然,我假设缓存仍然存在,只要我不明确清除缓存。

  2. 困难的方法:我会将所有 100 个资产包压缩到 1 个 zip 文件。游戏将下载 xml 文件和 zip 文件。我将解压缩 zip,并将所有 100 个资产包放在移动存储(iOS 和 Android)中。所以在那之后,如果游戏需要加载资产,我只需调用WWW.LoadFromCacheOrDownloadurl 是使用file:///指向移动存储路径的方案。

概括:

正常方式:

减号:我假设缓存还在,但如果缓存有问题,用户将无法玩游戏。

加:简单的实现,因为假设缓存会很好。

艰难的道路:

减号:嗯,我不知道这是否是减号,但是这一点,我必须实现未归档的 zip 文件并将它们存储在存储中。服务器端和应用程序端需要更多的实现。而且由于我是新手,我不知道这方面的最佳实践。

加:更健壮

那么哪个更好呢?或者有什么更好的推荐?

4

1 回答 1

3

我们基本上已经为我们的应用程序实现了您的正常方式和困难方式的混合。和你的一样,它的纹理很重,所以大多数纹理资产组都打包到自己的资产包中。(在我们的应用程序纹理中有一个逻辑分组,所以我们不单独打包它们)。但是,我们不会将它们直接下载到缓存中。我们将这些下载到 sdcard 并在需要时从那里加载它们(或从缓存中获取它们)。(即LoadFromCacheOrDownload)。

这取决于您的情况,但我通常建议不要将它们打包成一个 zip 文件。主要是关于更新。在我们的案例中,资产需要一些更新,或者我们想稍后添加资产。通过拥有一个包含版本控制数据的 XML 文件或数据库,更新设备上的数据是微不足道的。如果只有一个捆绑包发生变化,您只需要下载那个捆绑包。在我们的案例中,2MB 和 450MB 差别很大。

于 2013-08-22T07:56:38.063 回答