Unityで指定したアセットのAssetBundle名を取得する方法をまとめました。
- そのアセットについているAssetBundle名を取得する
- アセット自体にはついていないがフォルダについているAssetBundle名も取得する
- AssetBundle名が付いていないアセットを検索する
- 参考
Unity2018.4.11
そのアセットについているAssetBundle名を取得する
まず、アセット自体にAssetBundle名が付いているケースを考えます。
そのアセットについているAssetBundle名はAssetImporterから取得することができます。
AssetImporter.GetAtPath(assetPath).assetBundleName
アセット自体にはついていないがフォルダについているAssetBundle名も取得する
次に、アセット自体にはAssetBundle名がついておらず、そのアセットが所属するフォルダにAssetBundle名が付いているケースを考えます。
この場合はフォルダ内のアセットがすべて一つのAssetBundleになります。
このようにフォルダについているAssetBundle名も含めて取得する場合にはAssetDatabaseを以下のように使います。
AssetDatabase.GetImplicitAssetBundleName(assetPath)
AssetBundle名が付いていないアセットを検索する
最後にこれらを応用してAssetBundle名が付いていないアセットを検索してみます。
var result = new List<string>(); foreach (var assetPath in AssetDatabase.GetAllAssetPaths()) { if (AssetDatabase.IsValidFolder(assetPath)) { continue; } var assetBundleName = string.IsNullOrEmpty(AssetDatabase.GetImplicitAssetBundleName(assetPath)); if (string.IsNullOrEmpty(AssetDatabase.GetImplicitAssetBundleName(assetPath))) { result.Add(assetPath); } } result.Sort();