【Unity】指定したアセットのAssetBundle名を取得する

Unityで指定したアセットのAssetBundle名を取得する方法をまとめました。

Unity2018.4.11

そのアセットについているAssetBundle名を取得する

まず、アセット自体にAssetBundle名が付いているケースを考えます。

f:id:halya_11:20200108141950p:plain

そのアセットについている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();

参考

docs.unity3d.com