Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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、すごい!!!痒いところに手が届く!!!

s44511173
SE暦20年です。 2019年5月より、フリーランスエンジニアとなりました。 Unityは始めたばかりですが、がんばります!! よろしくお願いします。
https://atelier-hinata.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away