簡単なローディング画面(読み込み中)の作成【Unityゲーム制作】

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を調整しておきます。

遷移先のシーンが軽い場合、読み込み中画面が一瞬しか表示されないので進捗バーではなく、アニメーションでクルクル回しても良いのかも。逆に読み込みが長いシーンでクルクル表示していると、動いてるのか不安になりますね。

タイトルとURLをコピーしました