Unityでステージ選択画面を作る方法|ステージ解放・セーブ機能も解説

Unity

Unityでステージ制のゲームを作るとき、

「ステージ選択画面をどう作ればいいのか」
「クリアしたステージに応じて、次のステージを解放するにはどうするのか」
「ステージの解放状況を保存するにはどうすればいいのか」

で迷うことがあります。

ステージ選択画面を作るときは、ボタンを並べるだけでなく、クリア状況に応じたステージ解放、PlayerPrefsを使った保存処理、選択したステージへのシーン遷移も考える必要があります。

この記事では、Unityでステージ選択画面を作る方法を初心者向けに解説します。

ステージ選択画面の基本構成、ステージボタンの作り方、クリア状況に応じたステージ解放、PlayerPrefsを使った保存方法まで順番に紹介します。

この記事で分かること:

・Unityでステージ選択画面を作る流れ
・ステージボタンを配置して選択できるようにする方法
・クリア状況に応じて次のステージを解放する方法
・PlayerPrefsでステージ解放状況を保存する方法
・SceneManagerで選択したステージへシーン遷移する方法

バージョン
Unity:2021.3.22f1

Unityでステージ選択画面に使うシーンを準備する

最初に、ゲーム内の各ステージをシーンとして設計します。例えば、メインメニュー、レベル1、レベル2などの各ステージごとにシーンを作成します。Projectウィンドウで右クリックし、Create > Scene を選択して、各ステージ用のシーンを作成します。

今回は、例として「Stage1」~「Stage4」を作成しています。
実際にゲームで実装する際は、ステージ1のシーンを作成後に複製することがおすすめです。
ステージ1内容がコピーされるため、ゲーム作成後の方が手間が少なくなります。

Unityでステージ選択画面のUIを作成する

ここでは、以下のようなステージ選択画面のUIを作成します。
・各ステージ選択できる
・ステージは1つクリアすると次のステージが解放される

ステージ選択用のシーンを作成したら、次にステージを選ぶためのボタンを配置します。

Hierarchyウィンドウで右クリックし、UI > Button を選択してボタンを作成します。
作成したボタンの名前を「Stage1」に変更し、ボタン内のTextも「Stage1」に変更します。

同じ手順で「Stage1」〜「Stage4」までのボタンを作成します。
※画面上部の「Stage Select」という文字は、UI > Text を選択して配置しています。

ステージ選択ボタンを制御するスクリプトを作成する

PlayerPrefsでステージ解放状況を取得する

ここでは、ステージ選択ボタンを制御するスクリプトを作成します。

このスクリプトでは、PlayerPrefsに保存されたステージ解放状況を取得し、解放済みのステージだけボタンを押せるようにします。
また、ボタンを押したときに選択したステージへ移動する処理も行います。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class StageSelectManager : MonoBehaviour
{
    // ボタンを配列として定義
    [SerializeField] private Button[] _stageButton;
    void Start()
    {
        // ステージのクリア数を取得
        int stageUnlock = PlayerPrefs.GetInt("StageUnlock", 1);

        // ステージボタンの表示・非表示の設定
        for (int i = 0; i < _stageButton.Length; i++)
        {
            if (i < stageUnlock)
                _stageButton[i].interactable = true;
            else
                _stageButton[i].interactable = false;
        }
    }
    public void StageSelect(int stage)
    {
        // 受け取った引数(stage)のステージをロードする
        SceneManager.LoadScene(stage);
    }
}

SceneManagerで選択したステージへ移動する

ここでは、ステージボタンを押したときに、選択したステージへ移動できるように設定します。
ボタンのOnClick()にスクリプトを登録することで、クリック時にStageSelect()を実行できるようになります。
 ・Hierarchyウィンドウで右クリックし、”Create Empty” を選択して、「StageSelectManager」を作成します。
 ・作成したScriptをドラッグして、追加します。
 ・StageButtonの中にStage1~Stage4のボタンを追加します。

ステージ選択ボタンを押したあとに別のステージへ移動する処理は、シーン遷移の仕組みを使います。
SceneManager.LoadSceneを使った基本的なシーン遷移の方法は、以下の記事で解説しています。
Unityでシーン遷移を実装する方法

次に、各ボタンのInspectorを展開し、設定をします。
 ・先ほど作成した「StageSelectManager」をOnClick()にドラッグで追加します。
 ・右上のFunctionには「StageSelectManager.StageSelect」を選択します。
 ・右下は各ステージのステージ数の番号を格納します。
上記をステージ1~ステージ4までのボタンで設定を行います。

PlayerPrefsでクリア状況を保存し、次のステージを解放する

ステージをクリアした際に次のステージをアンロックする処理を実装します。
また、クリアできなかった場合はステージ選択画面に戻る処理も記載しています。
 ・クリアしたステージ数を取得
 ・クリアしたステージ数を加算
 ・次のステージをロードする
 ・クリアしていない場合は、ステージ選択画面に戻る

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class StageManager : MonoBehaviour
{
    public void nextStage()
    {
        // ステージのクリア数を取得
        int StageUnlock = PlayerPrefs.GetInt("StageUnlock", 1);
        int NextScene = SceneManager.GetActiveScene().buildIndex + 1;
        if (NextScene < 5)
        {
            if (StageUnlock < NextScene)
            {
                PlayerPrefs.SetInt("StageUnlock", NextScene);
            }
            SceneManager.LoadScene(NextScene);
        }
        else
            //ステージ選択画面に戻る(0:build時の1番上のシーンを読み込みます)
            SceneManager.LoadScene(0);
    }
}

上記のスクリプトは、ステージをクリアしたタイミングで実行するように設定します。

例えば、ゴールに到達したときやクリアボタンを押したときに nextStage() を呼び出すことで、次のステージ解放とシーン遷移を行えます。

ステージの解放状況を保存したい場合は、セーブ機能の考え方もあわせて理解しておくと便利です。
PlayerPrefsを使ったデータ保存の基本は、以下の記事でも解説しています。
Unityでセーブ機能を作る方法


ステージ選択で使うシーンをBuild Settingsに追加する

ゲームをプレイする前にビルドを行います。
 ・”File”-“build settings”を開きます。
 ・作成したStage1のシーンをドラッグで追加します。
上記の操作をStage1~Stage4まで行います。

まとめ:Unityの簡単なセーブ機能はPlayerPrefsから始めよう

今回は、UnityでPlayerPrefsを使ってセーブ機能を作る方法を解説しました。

PlayerPrefsを使えば、ハイスコア、クリアタイム、プレイヤー名、ステージ解放状況など、ちょっとしたデータを簡単に保存できます。

特にUnity初心者のうちは、まず「保存する」「取得する」「削除する」という基本の流れを理解することが大切です。

ステージ管理やシーン遷移と組み合わせることで、ゲームを終了しても進行状況を残したり、クリア済みステージを次回起動時に反映したりできるようになります。

まずはハイスコア保存のような小さな機能から試して、少しずつ実際のゲームに必要なセーブ処理へ応用していきましょう。

次に読むおすすめ記事

Unityの基本操作や学習環境を整えたい方は、Unity Learnを日本語で使う方法もあわせて確認してみてください。
ステージ選択画面を作ったら、次は以下の機能もあわせて実装しておくと便利です。

  • ステージボタンを押して別シーンへ移動する方法
  • ステージのクリア状況や解放状況を保存する方法

関連記事:

📚 関連書籍のおすすめ

本記事の内容をさらに深く学びたい方には、以下の書籍がおすすめです:

不明点や指摘等がありましたら、コメントいただけると助かり
ます。
コメントまたはtwitterで連絡をお待ちしています。
twitterアカウント~otakutomo~

コメント

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