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

  • 15
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

なんかまとまった情報が見あたらなかったので書いておく。(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にする、特に問題はなさそう。