Unityでの効果的なゲームステージ管理の実装方法

Unity

ゲーム開発において、ステージ管理は重要な要素です。
プレイヤーの体験を向上させるために、スムーズなステージ切り替えやゲームの進行の管理が必要となります。
この記事では、Unityでの効果的なゲームステージ管理の実装方法について紹介します。
ステージ管理画面の機能と完成図は以下の通りです。
・各ステージ選択できる
・ステージは1つクリアすると次のステージが解放される

バージョン
 Unity:2021.3.22f1

シーンのセットアップ

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

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

ステージ管理画面の作成

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

フォルダの中で、右クリックし、”Create”ー”Scene”でシーンを作成します。
シーン作成後、ステージの選択ボタンを作成します。
 ・”UI”ー”Button”を選択し、配置します。
 ・作成したボタンの名前を「Stage1」に変更します。
 ・「Stage1」の配下にあるTextを選択し、Textの内容を「Stage1」に変更します。
上記を参考に「Stage1」~「Stage4」のボタンを作成します。
※図のタイトルの「Stage Select」のTextは”UI”ー”Text”を選択し、配置しました。

ステージ管理スクリプトの作成

ステージ管理を行うために、以下のスクリプトを作成します。
以下は、ステージ管理スクリプトの例です。

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);
    }
}

次は、ボタンを押した際に押したボタンのステージを読み込めるようにします。
ボタンを押した際にスクリプトを実行させるようにします。
 ・Hierarchyウィンドウで右クリックし、”Create Empty” を選択して、「StageSelectManager」を作成します。
 ・作成したScriptをドラッグして、追加します。
 ・StageButtonの中にStage1~Stage4のボタンを追加します。

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

ステージクリア時のアンロック

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class StageManager : MonoBehaviour
{
    public void nextStage()
    {
        // ステージのクリア数を取得
        int StageUnlock = PlayerPrefs.GetInt("StageUnlock");
        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);
    }
}

上記のスクリプトを皆さんが作成したゲームのクリア時に実行するように
処理の追加をお願いします。


ビルドする

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

おわりに

Unityで複数シーンを使ったステージを管理する方法を解説しました。
このブログでは、私が学んだUnityの知識をまとめていきたいと思います。

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

コメント

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