哪种方式更适合处理AssetBundle下载管理

时间:2013-08-22 02:15:34

标签: unity3d assetbundle

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

我希望我的游戏可以在用户首次下载所有需要的资产包时离线播放 AFTER 。因此,如果用户第一次玩游戏或下载我的游戏的更新版本,游戏将被强制进入特殊场景,在那里它将下载所有需要的资产捆绑,之后,用户可以在没有互联网连接的情况下玩游戏。

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

  1. 正常方式:我将所有100个资产捆绑包放在我的服务器中,并放入1个xml文件,其中包含所有assetbundles信息及其版本。在特殊场景中,游戏将下载xml文件,然后通过WWW.LoadFromCacheOrDownload下载100个资产包。目的只是将所需的资产捆绑存储到游戏缓存中。成功下载所有这些后,用户可以离线播放,如果游戏需要加载assetbundle,那么我只需要对WWW.LoadFromCacheOrDownload进行callagain,因为它仍然在缓存中,它可以脱机播放。当然,我认为只要我不明确清除缓存,缓存仍然存在。

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

  3. 摘要:

    正常方式:

    减:我认为缓存仍然存在,但如果缓存中有问题,则用户无法玩游戏。

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

    艰难的方式:

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

    另外:更强大

    哪一个更好?或者更好的推荐?

1 个答案:

答案 0 :(得分:2)

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

这取决于你的情况,但我通常建议不要将它们打包成一个zip文件。主要是关于更新。在我们的情况下,资产需要进行一些更新,或者我们希望稍后添加资产。通过使用包含版本控制数据的XML文件或数据库,更新设备上的数据是微不足道的。如果只有一个包更改,您只需要下载该单个包。在我们的情况下,2MB对450MB是完全不同的。