ゲーム開発において、ステージ管理は重要な要素です。
プレイヤーの体験を向上させるために、スムーズなステージ切り替えやゲームの進行の管理が必要となります。
この記事では、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~
コメント