こんにちはRenRenCreate(R&R)です。ゲーム制作で迷ったところ・難しかったところをまとめてるサイトです。今回はパズルゲームにありがちなステージシステムの作り方を紹介します。
完成イメージ
目標
・前ステージをクリアしたら次のステージのアンロックするシステム
・ステージ切り替えシステム
1.Sceneをステージ分+ステージ選択Sceneを用意する。
1-1.sceneを用意する
ここではすで自分で作ったステージを用意するだけで大丈夫です。今回は説明のために5ステージ分だけステージを用意しました。ステージを選択するためのシーンも一つ用意してください。今回は[Stageselect]という名前のシーンがこれに該当します。
1-2.[StageSelect]Sceneにボタンを配置する
ステージを選択させるシーンに移動し、ステージに飛ぶためのボタンを配置します。
2.Scriptを書く
[Hierarchy]→[左クリック]→[Create empty]でStageSelectManagerと名付け、
これに以下ののScriptをアタッチする
C#コード
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);
}
public void nextStage()
{
// ステージのクリア数を取得
int StageUnlock = PlayerPrefs.GetInt("StageUnlock");
int NextScene = SceneManager.GetActiveScene().buildIndex + 1;
if (NextScene < 6) //ここの数値は皆さんのステージ数+1してください
{
if (StageUnlock < NextScene)
{
PlayerPrefs.SetInt("StageUnlock", NextScene);
}
SceneManager.LoadScene(NextScene);
}
else
//ステージ選択画面に戻る(0:build時の1番上のシーンを読み込みます)
SceneManager.LoadScene(0);
}
}
このScriptをオブジェクトにアタッチしたのち先ほどのボタンを配列として定義してあげます。
この時点でステージ1しか選択できなくなっています。
3.ボタンを押したらSceneが移動するようにする
このままではボタンに役割がないため押しても反応しません。ここではボタンに役割をつけてあげます。
すべてのボタンに対して[Inspector]→[Button]→[OnClick]→[+]を押してnoneに先ほどつくったStageSelectManager”オブジェクト”をドラックしてアッタチするとひだりのような画面になります。ここで[StageSelectManager]を選択し、[Stageselect]関数を指定。下にステージ数を入力します。
これでステージ1を押せばシーンが切り替わるようになりました!
4.次のステージのアンロック
最後にステージをクリアしたら次のステージがアンロックするようにスクリプトを修正する必要があります。ステージクリアの基準はゲームによると思うのでここではスクリプトのみ紹介します。以下のスクリプトの内容をステージクリア時の関数内に追記してください。このコードではPlayerPrefsを使っていますが、これは別に詳しく記事を書くのでぜひそちらを見てください。
// ゲームをクリアする処理
private void ClearGame()
{
//ここから
// ステージのクリア数を取得
int StageUnlock = PlayerPrefs.GetInt("StageUnlock");
int NextScene = SceneManager.GetActiveScene().buildIndex + 1;
if (StageUnlock < NextScene)
{
PlayerPrefs.SetInt("StageUnlock", NextScene);
}
SceneManager.LoadScene("StageSlect");
//ここまで
}
これでステージクリアしたら次のステージがアンロックされるステージ選択システムが完成しました!
コメントを残す コメントをキャンセル