Unity3d 使用旧数据重建Unity资产包

Unity3d 使用旧数据重建Unity资产包,unity3d,assetbundle,Unity3d,Assetbundle,我有一个移动项目,通过移动应用程序向用户显示各种AR体验。这项申请是统一提出的 除了这个Unity项目,我们还有第二个项目专门存储资产包。每个AR体验都是一个带有唯一资产包名称的预制件。这些捆绑包在线存储,并在相关时下载到主移动应用程序中。我们在正确更新这些捆绑包方面遇到了问题,当在预置上更改诸如缩放或旋转之类的内容时,它们不会反映在重建的资产捆绑包中 下面看一下我们用于重建资产的过程,它只是一个简单的脚本 [MenuItem("Spiff/Build AssetBundles")] stati

我有一个移动项目,通过移动应用程序向用户显示各种AR体验。这项申请是统一提出的

除了这个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%最新的?

加载的资产绑定确实会被缓存,并且将一直如此,直到调用
AssetBundle.Unload()
以释放与资产相关的所有内存

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


另一方面:您似乎仍在使用旧的资产组合管道。Unity有一个插件工具,称为assetbundle浏览器,它使assetbundle工作流变得相当容易。它提供了一种更容易构建捆绑包和检查捆绑包的UI、开放源代码和一个非常可定制的管道。它可能值得一看。

就像remy\u rm提到的那样,一定要尝试一下Unity Asset Bundle浏览器工具。它可以更好地控制捆绑包中的资产

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

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


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

您还可以显示加载到资产捆绑包中的代码吗?