18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2014-11-01

本記事の内容をはてなブログに転記しました。
すぐに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にする、特に問題はなさそう。

18
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?