Posted at

Unity3DのLoadLevelAsyncとAsyncOperationで非同期ロードを待ってみる

More than 3 years have passed since last update.

なんかまとまった情報が見あたらなかったので書いておく。(Unity3D 4.3.7p3)

Unity - Scripting API: Application.LoadLevelAsync

Unity - Scripting API: AsyncOperation.allowSceneActivation

//C#で

//どっかからコルーチンを呼ぶ
IEnumerator LoadNextLevel() {
AsyncOperation ao = Application.LoadLevelAsync(nextLevelName);
ao.allowSceneActivation = false;
while( ao.progress < 0.9f ) {
//演出などで確実に待ちを入れたい場合は ( ao.progress < 0.9f || 読み込み時間 < 確実に待たせたい時間 ) みたいな感じで判定
yield return new WaitForEndOfFrame();
}
//次のレベルに遷移
ao.allowSceneActivation = true;
//ao.isDoneはfalseのまま
yield return null;
}

ドキュメントを読んで、じゃあAsyncOperationのisDone見張ってればいいのかな? と思ったらisDoneがいつまで待ってもtrueにならない。

progressも0.9f辺りで止まる。

しかたないのでprogressが0.9f以上になったら読み込みが終わってることにしてallowSceneActivationをtrueにする、特に問題はなさそう。