Unity3DのLoadLevelAsyncとAsyncOperationで非同期ロードを待ってみる
本記事はQiita投稿記事「Unity3DのLoadLevelAsyncとAsyncOperationで非同期ロードを待ってみる - Qiita」を転記したものです。投稿日はQiitaでの初投稿日に合わせています。
なんかまとまった情報が見あたらなかったので書いておく。(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にする、特に問題はなさそう。