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にする、特に問題はなさそう。