ビルド後のAssetBundleから依存関係の情報を取得する方法です。
Unity2018.3.9
.manifestにも書かれてるけど・・・
AssetBundleをビルドすると、ビルドしたフォルダの直下にフォルダ名と同じ名前のAssetBundleと.manifestファイルが作られます。
このうち、.manifestファイルには人間の読める文字でAssetBundle同士の依存関係が書かれています。
ManifestFileVersion: 0 CRC: 1425681598 AssetBundleManifest: AssetBundleInfos: Info_0: Name: materials/material01 Dependencies: Dependency_0: textures/texture01 Info_1: Name: materials/material02 Dependencies: Dependency_0: textures/texture01 Info_2: Name: prefabs/prefab01 Dependencies: Dependency_0: materials/material01 Dependency_1: materials/material02 Dependency_2: prefabs/prefab02 Info_3: Name: prefabs/prefab02 Dependencies: Dependency_0: materials/material02 Info_4: Name: textures/texture01 Dependencies: {} Info_5: Name: fbx/fbx01 Dependencies: {} Info_6: Name: scenes/scene01 Dependencies: Dependency_0: prefabs/prefab01 Dependency_1: fbx/fbx01
ただしここに書かれているDependenciesはあくまでそのAssetBundleが直接依存しているものだけであり、
あるAssetBundleが依存しているAssetBundleをすべて取得するには依存関係をたどらなければなりません。
これは人間のやるべき作業ではないのでスクリプトから操作してみます。
フォルダ名のAssetBundleから依存関係を取得する
フォルダと同じ名前のAssetBundle(.manifestではなく)を使うと、スクリプトで依存関係を得られます。
まず、フォルダと同じ名前のAssetBundleをロードして、
さらにそのAssetBundleからAssetbundleManifestという型のAssetをロードします。
var manifestAssetBundle = AssetBundle.LoadFromFile(manifestAssetBundlePath); var manifest = manifestAssetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest"); manifestAssetBundle.Unload(false);
あとはこのAssetBundleManifestのGetAllDependencies()
やGetDirectDependencies()
を使って依存関係を取得するだけです。
全ての依存しているAssetBundleを得るにはGetAllDependencies()
を使います。
直接参照しているものだけを得るにはGetDirectDependencies()
を使います。
// assetBundleName が直接参照しているAssetBundleを取得する manifest.GetDirectDependencies(assetBundleName); // assetBundleName が参照している全てのAssetBundleを取得する manifest.GetAllDependencies(assetBundleName);