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