検証環境
概要
Exception: Attempting to use an invalid operation handle
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.get_InternalOp () (at Runtime/ResourceManager/AsyncOperations/AsyncOperationHandle.cs:377)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.get_Result () (at Runtime/ResourceManager/AsyncOperations/AsyncOperationHandle.cs:453)
UnityEngine.ResourceManagement.ResourceProviders.SceneProvider+SceneOp.Execute () (at Runtime/ResourceManager/ResourceProviders/SceneProvider.cs:64)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].InvokeExecute () (at Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:477)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].<.ctor>b__33_0 (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle o) (at Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:114)
DelegateList`1[T].Invoke (T res) (at Runtime/ResourceManager/Util/DelegateList.cs:69)
UnityEngine.Debug:LogException(Exception)
DelegateList`1:Invoke(AsyncOperationHandle) (at Runtime/ResourceManager/Util/DelegateList.cs:73)
UnityEngine.ResourceManagement.ResourceManager:Update(Single)
MonoBehaviourCallbackHooks:Update() (at Runtime/ResourceManager/Util/MonoBehaviourCallbackHooks.cs:15)
- Addressables でアセットバンドルをサーバからダウンロードする時に
通信環境が悪いなどの理由でダウンロードに失敗すると
上記の例外が発生することがあった
- 例外が発生すると、それ以降アセットバンドルのダウンロードなどができなくなり、
一度アプリを再起動しないと Addressables が正常に動作しなくなる状態だった
- AsyncOperationHandle.Result でハンドルが有効かどうかの判定を追加すると
ダウンロードに失敗しても例外が発生することはなくなる
AsyncOperationHandle.cs
461 行目以降
public object Result
{
get { return IsValid() ? InternalOp.GetResultAsObject(): default; }
}