13
8

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 5 years have passed since last update.

【Unity】非同期のシーン切り替え、だけどちょっと待ちたい

Posted at

Unityで非同期のシーン切り替え、だけどちょっと待ちたい時

シーンのロード

シーンをロードする際、非同期でロードしたい場合がありますよね。
ロード中画面を表示しつつ、裏でロードしておきたい。
ロード中画面には、画面が固まってしまっていないことを示すために
進捗バーを出すとか、砂時計を出すとかしたい。

そんな時は、SceneManager.LoadScene()ではなく
**SceneManager.LoadSceneAsync()**を使用するのがお約束ですよね。

ロードが早すぎて、せっかくの進捗バーが見えない

なーんてことも、あり得ます。せっかくの進捗バーなのに。
非同期でロードするけど、ある程度は時間をかけたい。
なんてわがままなんだ・・・。

allowSceneActivationを使おう

そんなわがままな要求にも、答えてくれるのがUnityさんです。さすが!!

AsyncOperation.allowSceneActivation
シーンが準備完了となったタイミングですぐにシーンが有効化されることを許可します。
(Unity公式ページより引用)

つまり、準備ができていても一定時間経過するまではallowSceneActivation=falseとしておけば
シーンが切り替わるのを待ってくれる、ということになります。

実装はこんな感じ。

    private IEnumerator LoadScene() {
        var async = SceneManager.LoadSceneAsync("NextScene");

        async.allowSceneActivation = false;
        yield return new WaitForSeconds(1);
        async.allowSceneActivation = true;
    }

こうすることで、指定時間(↑では1秒)待ってからシーンを切り替えることができます。

結論

Unity、すごい!!!痒いところに手が届く!!!

13
8
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
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?