この記事は伝えたいことが1個しかありません。
#Addressableのバージョンは1.16.10です
1.Addressableのキーの存在確認。
2.Addressableが読み込めていない。
1.Addressableのキーの存在確認。
専用のAPIあったら教えてほしい。 keyは大文字小文字の区別をつけないとだめです。keycheck.cs
using UnityEngine.ResourceManagement.ResourceLocations;
public static bool Exist<T>(string key, out IResourceLocation location)
{
location = null;
foreach (var local in Addressables.ResourceLocators)
{
local.Locate(key, typeof(T), out IList<IResourceLocation> resourceLocations);
if (resourceLocations != null)
{
if (resourceLocations.Count >= 2) DebugS.LogWarning($"key = {key} type = {typeof(T).Name} is Find {resourceLocations.Count} datas.");
location = resourceLocations[0];
return true;
}
}
return false;
}
2.Addressableが読み込めていない。
1.のキーチェックでタイミングによってはデータをチェックできたりできなかったりしてました。 チェックができない理由はAddressableが初期がされる以前にアクセスしているから。 回避方法は「await Addressables.InitializeAsync().Task;」とかやった後にチェックする。 当方UniTask使いゆえサンプル書いたけどあとはフィーリングでなんとかして!LoadData.cs
public async UniTask LoadInitialData(string KeyName)
{
await Addressables.InitializeAsync(); // ここ重要
if (Exists<T>(keyName, out var location))
instance = await Addressables.LoadAssetAsync<T>(location);
if (instance == null) instance = CreateInstance<T>();
}
もしかしてまだAddressable正式版じゃない説ある!ある?
そもそもなんでAddressables.LoadAssetAsync(keydata)で存在しなかったらInvalidExceptionになるんだよおかしいだろ!例外キャッチできないし、そも例外はスマートじゃないだろいい加減にしろ!コメントで教えてもらいました
存在確認が良い感じにいけたので共有を兼ねてここにも張り付けておきます!Hoge.cs
public static async UniTask<bool> Exists(string pathToAsset)
=> (await Addressables.LoadResourceLocationsAsync(pathToAsset)).Any();
@taishi-matsumuraさんありがとうございます!