Unityでゲームアプリを作る際にシーンをまたぐ時に少しでもシーン遷移を軽くする方法を個人的備忘録も兼ねて書き残しておきます。
# シーン読み込みは非同期で
以下のようにコルーチンでLoadSceneAsyncを使用する事で非同期でシーンを読み込む事が出来ます。非同期処理中のステータスはAsyncOperation型の変数、この場合asyncLoadに記録されています。処理が完了するとisDoneがtrueになります。
# 任意のタイミングで発動
下記の例では予め非同期処理でシーンの読み込みをしておき、任意のタイミングで素早くシーン切り替えがされるようにしました。
具体的には、asyncLoad.allowSceneActivationをfalseにする事で、読み込みが完了しても次のシーンに移行しなくなります。この場合、asyncLoad.allowSceneActivationの値をtrueに書き換えた瞬間シーン遷移がなされます(読み込みが完了していれば)。
# 注意点
asyncLoad.allowSceneActivationをfalseにしてシーン遷移を保留にしている時にはasyncLoad.progressが1になる事もisDoneがtrueになる事もありませんので、もしif文などでprogressなどを処理の条件にする場合は注意しましょう。
# ローディング画面を表示する方法
シーンに限らず何かロード中に、ユーザーを飽きさせないためにローディング画面を表示することはよくある事です。以下の例ではシーンのロード中に簡単なローディング画面を表示します。進捗度合いがバーになって表示されます(一瞬で終わるかもしれませんが・・・)。
このサンプルでは進捗バーにスライダーコンポーネントを使います。 public変数に設定して実行する事で簡単なロード画面を作る事ができます。
以上、簡単ではありますがシーン遷移の高速化とロード画面の実装を紹介しました。