Qemelly(けめる)のプログラム備忘録

Unity / AtCoderについて書きます

【Unity】AddressablesでComponentをロードすることは(多分)できない!

以下のようなコード。

private async UniTask Load()
{
    var handle = Addressables.LoadAssetsAsync<HogeComponent>("AssetsPath", null);

    await handle.Task;

    if (handle.Status == AsyncOperationStatus.Succeeded)
    {
        // 何らかの処理
    }

    Addressables.Release(handle);
}

このようなコードだとエラーが出てしまいます。

どうやらLoadAssetAsyncでは、コンポーネントクラス等は直接ロードできないようです。

解決法

GameObjectScriptableObject等はロードできるので、そこから対象のComponentを取得しましょう。

private async UniTask Load()
{
    var handle = Addressables.LoadAssetsAsync<GameObject>("AssetsPath", null);

    await handle.Task;

    if (handle.Status == AsyncOperationStatus.Succeeded)
    {
        foreach (var res in handle.Result)
        {
            var component = res.GetComponent<HogeComponent>();
            // 処理
        }
    }

    Addressables.Release(handle);
}