概要
- Addressables.InitializeAsync でリモートカタログがダウンロードされるが
ダウンロードに失敗した場合も内部では初期化済みフラグが立ってしまう
- AddressablesImpl.hasStartedInitialization がそのフラグ
- フラグが立ってしまうと、再度 Addressables.InitializeAsync を呼び出しても
初期化済みとみなされ何もせず AsyncOperationStatus.Succeeded が返ってきてしまう
- 下記のようなコードを記述することで、外部から初期化済みフラグを折ることができる
var addressablesType = typeof( Addressables );
var assembly = addressablesType.Assembly;
var addressablesImplType = assembly.GetType( "UnityEngine.AddressableAssets.AddressablesImpl" );
var addressablesImplField = addressablesType.GetField( "m_Addressables", BindingFlags.Static | BindingFlags.NonPublic );
var addressablesImpl = addressablesImplField.GetValue( null );
var hasStartedInitializationField = addressablesImplType.GetField( "hasStartedInitialization", BindingFlags.Instance | BindingFlags.NonPublic );
hasStartedInitializationField.SetValue( addressablesImpl, false );
Addressables.ClearResourceLocators();
- InitializeAsync に失敗した場合も、内部で下記の変数が初期化されてしまうが
これらはそのままでも問題なさそう
- AddressablesImpl.m_InstanceProvider
- AddressablesImpl.SceneProvider
- AddressablesImpl.m_InitializationOperation