うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【Unity】Addressable でディレクトリにアドレスを設定する意味

Addressable ではディレクトリにアドレスを設定することができる

しかし、実際にそのアドレスをロードしようとすると、次のエラーが出てしまいます

UnityEngine.AddressableAssets.InvalidKeyException: Exception of type 'UnityEngine.AddressableAssets.InvalidKeyException' was thrown. No Location found for Key=Prefab
UnityEngine.AddressableAssets.Addressables:LoadAssetAsync<UnityEngine.GameObject> (object)

Addressable Groupsを確認してみると、アドレスを設定したディレクトリ内のアセットには、自動的にアドレスが設定されています

しかも、アセットの名前は自動的に {dirName}/{name}.{extension} の形式で付けられるため、変更できません

ディレクトリにアドレスを付けることのメリットは、Bundle ModePack Separately でも、ディレクトリ以下のアセットが別々にバンドルになることなく、全て一つのバンドルにまとまることだと思います

もし、指定したディレクトリ以下のアセットをロードするには以下のように ResourceLocators の中から探すとかでしょうか?

    var targetDirAddress = new List<string>();
    foreach (var rl in Addressables.ResourceLocators)
    {
        foreach (var key in rl.Keys)
        {
            if (!(key is string k)) 
                continue;

            if (!k.StartsWith(LocalDirPath) || !k.Contains(".")) 
                continue;
            
            targetDirAddress.Add(k);
        }
    }