Unityでシーンを切り替える時、「移動先のシーンを先に読み込み」、「読み込みが終わるまでローディング画面」を出してみます。
進捗バーを表示して、どこまで読み込んでいるのかも表現してみます。
はじめに
「Unity 2022.3.14f1」バージョンで作成しています。
簡単な「進捗バー付きのローディング画面」を作成していきます。
実装開始
「簡単なUI作成」→「スクリプト作成」→「調整」の順番でしていきます。
画面を作成
まずは「ローディング画面(遷移前の画面)」を作成していきます。
Hierarchyで右クリック、「UI」→「Legacy」→「Button」を追加。
Buttonの位置とサイズを調整します。
「UI」→「Panel」を追加。
Panelの配下に「UI」→「Slider」を追加。
パネルの背景を真っ黒にします。
スライダーのサイズを変更。
Slider内のFillの色を適当に設定します、今回は青色に。
Handleのサイズを0に、色を合わせて青色にします。
Panelの配下に「UI」→「Legacy」→「Text」を追加。
位置とサイズ、Textを変更します。
下記がPanel有効時の画面イメージです。
SliderのValueを動かすと進捗バーが埋まります。
Valueが1で埋まらない場合、FillAreaを調整します。
スクリプトの作成
次にスクリプトでSliderのValueを動かします。下記スクリプトを作成します。
using System.Collections; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class LoadingScene : MonoBehaviour { [SerializeField] private GameObject _loadingUI; [SerializeField] private Slider _slider; public void LoadNextScene() { _loadingUI.SetActive(true); StartCoroutine(LoadScene()); } IEnumerator LoadScene() { AsyncOperation async = SceneManager.LoadSceneAsync("MainScene"); while (!async.isDone) { _slider.value = async.progress; yield return null; } } }
AsyncOperationのprogressでシーンの読み込み進捗状況の取得ができます。
空のオブジェクトを追加して、SceneManagerに名前を変更。スクリプトをアタッチして変数をセットします。
初期ではPanelを無効にしておきます。
BuildSettingsで移動先のシーン(MainScene)を追加します。
ButtonのOnClickに「LoadingScene」の「LoadNexeScene」を追加します。
これで実行。「ボタン押下」→「読み込み中画面」→「画面表示」となればOK。読込先が空なので一瞬しか表示されないです。
調整
実際に動かしてみると、進捗バーが100%になる前に次のシーンに遷移します。progressが0.9でisDoneがfalseになるようです。
いくつか修正方法がありますが、とりあえず0.9で進捗バーが埋まるようにFillAreaを調整しておきます。
遷移先のシーンが軽い場合、読み込み中画面が一瞬しか表示されないので進捗バーではなく、アニメーションでクルクル回しても良いのかも。逆に読み込みが長いシーンでクルクル表示していると、動いてるのか不安になりますね。