使用旧数据重建Unity资产捆绑包

时间:2018-11-23 03:08:26

标签: unity3d assetbundle

我有一个移动项目,可通过移动应用程序向用户显示各种AR体验。该应用程序是在Unity中制作的。

在这个Unity项目旁边,我们还有另一个项目专门存储资产捆绑包。每个AR体验都是一个标有唯一资产捆绑名称的预制件。这些捆绑软件在线存储,并在相关时下载到主移动应用程序中。我们在正确更新这些捆绑包时遇到问题,当在预制件上更改诸如缩放或旋转之类的内容时,它们不会反映在重建的资产捆绑包中。

下面是我们用于重建资产的过程,它只是一个简单的脚本。

[MenuItem("Spiff/Build AssetBundles")]
static void BuildAllAssetBundles()
{
    // BuildPlatformBundles(BuildTarget.iOS);
    BuildPlatformBundles(BuildTarget.Android);
}

static void BuildPlatformBundles(BuildTarget platform)
{
    // We convert the passed platform enum to a string.
    string platformFolder = platform.ToString();
    string assetBundleDirectory = "Assets/AssetBundles/" + platformFolder;

    // Build our bundles out to the relevent platform specific folder.
    if (!AssetDatabase.IsValidFolder(assetBundleDirectory))
    {
        AssetDatabase.CreateFolder("Assets/AssetBundles/", platformFolder);
    }
    BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, platform);
}

当前,我们使用“ BuildAssetBundleOptions.None”。我们还尝试了ForceRebuild标志,但这无效。我是否可以假设Unity具有为资产捆绑包保留的某种内部缓存?如果是这样,我们能否以某种方式清除此问题,以便我可以确保100%保证我正在构建的捆绑包基于标有该标签的预制件是最新的?

2 个答案:

答案 0 :(得分:1)

已加载的资产捆绑包确实已缓存,并且将一直保持缓存状态,直到调用AssetBundle.Unload()释放与资产相关的所有内存为止。

在资产unloaded之后,可以下载新版本的资产捆绑包并用新值实例化(假设下载的文件具有所有更新的信息),否则它将从缓存中加载数据(如果有)

在旁注:您似乎仍在使用旧的Assetbundle管道。 Unity有一个称为here的Assetbundle浏览器,可以使Assetbundle工作流程变得相当容易,它具有一个插件工具。它带有一种简便的UI,用于构建捆绑包和检查捆绑包,开源和非常可定制的管道。可能值得一试。

答案 1 :(得分:0)

就像提到的remy_rm一样,请尝试使用Unity Asset Bundle Browser工具。它提供了对捆绑中资产的更多控制。

如果您确保两件事,就可以解决您的问题:

1-当您对预制件进行更改并创建新的捆绑包时,是否确实通过上述更改创建了捆绑包? (再次使用该工具将使检查更加容易)

2-在主应用程序中下载的捆绑软件是新捆绑软件,而不是旧的缓存捆绑软件。例如,在Unity Webgl中,您需要清除浏览器缓存,以100%确保应用程序下载了新的资产捆绑包,并且未在浏览器缓存中使用旧的资产捆绑包。