我是Unity的新手,我开始为我的项目使用AssetBundle从服务器下载它们。我使用UnityWebRequestAssetBundle来下载资产,因为WWW已过时。一切正常,我可以从服务器下载资产并将其放入persistentDataPath中,并且可以毫无问题地将它们加载到场景中。但是后来我意识到,更新模型可能会有机会,因此我还需要在应用程序中对其进行更新。我知道资产捆绑中每个资产都有一个清单文件,因此当我下载资产时,我也会下载清单文件。我将所有内容作为Unity文档进行处理,但始终会出现此错误:
unable to read header from archive file: /manifest/location
清单下载方法如下:
IEnumerator GetManifest(string animal)
{
using (UnityWebRequest uwr = UnityWebRequestAssetBundle.GetAssetBundle("http://weppage.com/" + asset + ".manifest"))
{
uwr.downloadHandler = new DownloadHandlerFile(path + "/" + asset + ".manifest");
yield return uwr.SendWebRequest();
if ( uwr.isNetworkError || uwr.isHttpError )
{
Debug.Log(uwr.error);
}
}
}
下载后有一种检查方法:
AssetBundle manifestBundle = AssetBundle.LoadFromFile(Path.Combine(path, asset));
AssetBundleManifest manifest = manifestBundle.LoadAsset<AssetBundleManifest>("asset.manifest");
我完全迷路了。我通过了google,但无法正常工作。我不明白为什么它不起作用。我以相同的方式加载资产,没有任何问题,Unity文档说资产必须以相同的方式运行。来自Unity文档:Loading the manifest itself is done exactly the same as any other Asset from an AssetBundle
答案 0 :(得分:0)
您需要在 AssetBundle.LoadFromFile
中加载的文件是在您存储 AssetBundle 的同一文件夹中生成的文件。该文件与存储文件夹的名称相同。例如,如果您在名为 maps
的文件夹中生成了一个名为 bundles
的 AssetBundle,那么将同时生成一个文件 bundles
与maps
。这样,在 AssetBundle.LoadFromFile
中,您必须加载文件 bundles
。在任何情况下,您都必须加载任何 .manifest
文件。你的代码应该是这样的:
IEnumerator GetManifest(string animal)
{
using (UnityWebRequest uwr = UnityWebRequestAssetBundle.GetAssetBundle("http://weppage.com/" + asset))
{
uwr.downloadHandler = new DownloadHandlerFile(path + "/" + asset);
yield return uwr.SendWebRequest();
if ( uwr.isNetworkError || uwr.isHttpError )
{
Debug.Log(uwr.error);
}
}
}
下载后的检查方法:
AssetBundle manifestBundle = AssetBundle.LoadFromFile(Path.Combine(path, "bundles")); //the name of the example file I gave you
AssetBundleManifest manifest = manifestBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");