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资产包用旧数据重建的主要内容,如果未能解决你的问题,请参考以下文章