Как получить манифест Unity assetbundle?

введите здесь описание изображения

Вот мой код:

AssetBundle ab = AssetBundle.LoadFromFile(Application.dataPath + "/uia.manifest");//get null here
AssetBundleManifest manifest = (AssetBundleManifest)ab.LoadAsset("AssetBundleManifest");

person TimChang    schedule 20.01.2020    source источник
comment
Не загружайте .manifest файл как Asset-bundle. Кстати, зачем вам загружать .manifest файл?   -  person Ankit    schedule 20.01.2020


Ответы (2)


Файл, который вам нужно загрузить в AssetBundle.LoadFromFile, - это файл Assets, который хранится в той же папке, что и ваш AssetBundle uia. Этот Assets файл получает то же имя, что и папка, в данном случае Assets. Ваш код будет таким:

AssetBundle ab = AssetBundle.LoadFromFile(Application.dataPath + "/Assets");
AssetBundleManifest manifest = (AssetBundleManifest)ab.LoadAsset("AssetBundleManifest");
person Jon Iturmendi    schedule 05.03.2021

Взгляните на Использование AssetBundles в исходном формате, в частности раздел Загрузка AssetBundle Проявляет, где указано

Загрузка манифестов AssetBundle может быть невероятно полезной. Особенно при работе с зависимостями AssetBundle.

Чтобы получить пригодный для использования объект AssetBundleManifest, вам необходимо загрузить этот дополнительный AssetBundle (тот, который назван так же, как и папка, в которой он находится) и загрузить из него объект типа AssetBundleManifest.

Загрузка самого манифеста выполняется точно так же, как и любой другой актив из AssetBundle:

AssetBundle assetBundle =  AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");

Хотя, честно говоря, это плохо документировано, но в примерах, связанных с AssetBundles.LoadFromFile, вы видно, что они не загружают "Example.manifest" как AssetBundle, а только "Example" без суффикса!

Таким образом, в вашем случае он, кажется, помещен в Assets/uia, и вы должны загрузить этот архив как AssetBundle, а не как конкретный файл в нем.

AssetBundle assetBundle =  AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, "uia"));
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");

См. Также AssetBundle Руководство.

«AssetBundle» может относиться к двум различным, но связанным между собой вещам.

Во-первых, это фактический файл на диске. Это называется архивом AssetBundle. Архив AssetBundle представляет собой контейнер, например папку, в которой хранятся дополнительные файлы.

манифест является частью этого архива и может быть загружен только путем загрузки AssetBundle и последующего получения из него манифеста!

person derHugo    schedule 20.01.2020