1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Unity】 Addressables.LoadResourceLocationsAsync を使って同じラベルのデータを読み込む

Last updated at Posted at 2022-01-16

環境

  • Unity 2020.3.18f1
  • Addressables 1.18.19

手順

今回は検証のためいらすとやからいくつか素材をダウンロードして使います。
また、検証で作ったプロジェクトはGithubに上げております。

アセットの登録

  1. Windows > Asset Management > Addressables > Groups で設定ウィンドウを開く
  2. ダウンロードした素材をドラッグ&ドロップして登録
  3. Labels > Manage Labels でラベルの管理ウィンドウを開く
    image.png
  4. 「+」ボタン押して付けたい名前を入力。ここではOnePieceにします。
  5. 一括選択してラベルをつける
    image.png

これでアセットの登録が完了です。

スクリプトの作成

今回は「ボタンを押したらロードを開始して、読み込んだアセット毎をログで出力する」というスクリプトを作る。

LoadAsset.cs
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.EventSystems;

public class LoadAsset : MonoBehaviour, IPointerClickHandler
{
    public async void OnPointerClick(PointerEventData eventData)
    {
        // タイプ指定しない場合Texture2Dアセットもロードされてしまい、その後のLoadAssetでエラーになる
        // var locations = await Addressables.LoadResourceLocationsAsync("OnePiece").Task;
        var locations = await Addressables.LoadResourceLocationsAsync("OnePiece", typeof(Sprite)).Task;
        
        foreach (var location in locations)
        {
            Addressables.LoadAssetAsync<Sprite>(location).Completed += (op =>
            {
                Debug.Log($"{op.Result.name} loaded");
            });
        }
    }
}

ここで大事なのは、Addressables.LoadResourceLocationsAsyncを使うときに、第2引数のtypeはデフォルトでnullとなっていますが、タイプを指定していない場合、図のようにロケーションの取得で同じアセットが複数回登場してしまうことがある。

image.png
特にイメージアセットの場合は、同じアセットがSpriteTexture2Dの2種類としてカウントされているようです。
image.png

終わりに

Addressable.LoadResourceLocationsAsyncでアドレスを取得するときにあらかじめタイプを指定するか、
取得したアドレスに対して読み込むときに

if (location.ResourceType == typeof(Sprite))

で型のチェックをした方が無難でしょう。

参考

https://docs.unity3d.com/Packages/com.unity.addressables@1.19/api/UnityEngine.AddressableAssets.Addressables.LoadResourceLocationsAsync.html?q=LoadResourceLocationsAsync#UnityEngine_AddressableAssets_Addressables_LoadResourceLocationsAsync_System_Object_Type_

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?