検証環境
概要
- Addressables の LoadScene でシーン遷移する時に
通信環境が悪いなどの理由でアセットバンドルの読み込みに失敗した場合、
SceneProvider で AsyncOperationBase.Complete が呼ばれなくなり
それ以降 Addressables の API が正常に動作しなくなる現象に遭遇した
- SceneProvider.cs で例外が発生した時に
AsyncOperationBase.Complete を呼び出すようにすれば
アセットバンドルの読み込みに失敗した後も
Addressables の API が正常に動作するようになる
SceneProvider.cs
19 行目
bool m_isFailure;
69 行目以降
try
{
m_Inst = InternalLoadScene(m_Location, loadingFromBundle, m_LoadMode, m_ActivateOnLoad, m_Priority);
}
catch ( Exception )
{
m_isFailure = true;
}
- InternalLoadScene 内で例外が発生したらフラグを立てる
119 行目以降
protected override float Progress
{
get
{
if ( m_isFailure ) return 0;
- 処理に失敗した場合は進捗を返す Progress プロパティで 0 を返す
142 行目以降
void IUpdateReceiver.Update(float unscaledDeltaTime)
{
if ( m_isFailure )
{
Complete(default, false, null);
}
else if (m_Inst.m_Operation.isDone || (!m_ActivateOnLoad && m_Inst.m_Operation.progress == .9f))
- 処理に失敗した場合は Complete 関数を呼び出して第2引数に false を渡す