該当コード
Addressables.DownloadDependenciesAsync
のロード進捗率を取得しようとしたらタイトルのエラーが出ました。
public async void Load() {
AsyncOperationHandle downloadHandle;
IList<IResourceLocation> locations = await Addressables.LoadResourceLocationsAsync("hoge");
var locationGroups = locations.GroupBy(_ => _.DependencyHashCode);
foreach(IGrouping<int, IResourceLocation> group in locationGroups) {
downloadHandle = Addressables.DownloadDependenciesAsync(group.ToList(), true);
while(downloadHandle.Status == AsyncOperationStatus.None) {
var percentage = downloadHandle.GetDownloadStatus().Percent;
Debug.Log(percentage);
}
Addressables.Release(downloadHandle);
}
}
原因
上記コードの場合、DownloadDependenciesAsync
の第二引数(autoReleaseHandle
)をtrueにして自動的に開放してしまっているため、ダウンロードの完了と同時にAsyncOperationHandle
がnullになってしまう事が原因です。
単純にdownloadHandle.Status
の評価が出来ないことによりエラーが発生しています。
downloadHandle = Addressables.DownloadDependenciesAsync(group.ToList());
autoReleaseHandle
を無効化すればエラーが解消されます。
終わりに
autoReleaseHandle
を有効にしてダウンロード、かつDownloadStatusを監視していたため発生したエラーでした。
デフォルト値がfalseなので同じ症状が発生する人は少なそうですが、
意外と見落としがちなので同じ症状に困っている人に届けば幸いです。