【问题标题】:How to get unity assetbundle manifest?如何获得统一资产包清单?
【发布时间】:2020-01-20 09:03:43
【问题描述】:

这是我的代码:

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

【问题讨论】:

  • 你,不要将 .manifest 文件加载为 Asset-bundle。 BTW 为什么需要加载.manifest 文件?

标签: c# unity3d assetbundle


【解决方案1】:

查看Using AssetBundles Natively,尤其是Loading AssetBundle Manifests部分,其中指出

加载 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 Manual

“AssetBundle”可以指代两个不同但相关的东西。

首先是磁盘上的实际文件。这称为 AssetBundle 存档。 AssetBundle 存档是一个容器,就像一个文件夹,其中包含其他文件

&rightarrow; manifest 是这个存档的一部分,只能通过加载 AssetBundle 来加载,然后从中获取 manifest!

【讨论】:

    【解决方案2】:

    您必须在AssetBundle.LoadFromFile 中加载的文件是文件Assets,该文件与您的AssetBundle uia 存储在同一文件夹中。此Assets 文件与存储文件夹的名称相同,在本例中为Assets。你的代码应该是这样的:

    AssetBundle ab = AssetBundle.LoadFromFile(Application.dataPath + "/Assets");
    AssetBundleManifest manifest = (AssetBundleManifest)ab.LoadAsset("AssetBundleManifest");
    

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      相关资源
      最近更新 更多