Unity资产包用旧数据重建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity资产包用旧数据重建相关的知识,希望对你有一定的参考价值。

我有一个移动项目,通过移动应用程序向用户显示各种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%确保我正在构建的捆绑包将是最新的基于预标记的预制件吗?

答案

确实缓存了已加载的Assetbundles,并且在调用AssetBundle.Unload()以释放与资产相关的所有内存之前,它们将保持不变。

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

旁注:似乎你还在使用旧的assetbundle管道。 Unity有一个插件工具,可以让资产捆绑工作流程变得更加容易,称为资产捆绑浏览器here。它提供了一种更简单的UI,用于构建捆绑包和检查捆绑包,开源和可定制的管道。值得一试。

另一答案

像提到的remy_rm一样,请尝试使用Unity Asset Bundle Browser工具。它可以更好地控制捆绑中的资产。

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

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

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

以上是关于Unity资产包用旧数据重建的主要内容,如果未能解决你的问题,请参考以下文章

导致资产预编译在heroku部署上失败的代码片段

如何在不重建 apk 的情况下更新现有已安装应用程序的 Ionic 资产文件夹?

Unity用户手册2019.3(中文版)1.3.2 资源包

Unity用户手册2019.3(中文版)1.3.2 资源包

unity怎么调用asset文件

Android强制Fragment重建View