Unityでステージ選択システムを作ろう!

unity

こんにちはRenRenCreate(R&R)です。ゲーム制作で迷ったところ・難しかったところをまとめてるサイトです。今回はパズルゲームにありがちなステージシステムの作り方を紹介します。

完成イメージ

目標

・前ステージをクリアしたら次のステージのアンロックするシステム

・ステージ切り替えシステム


1.Sceneをステージ分+ステージ選択Sceneを用意する。

1-1.sceneを用意する

ここではすで自分で作ったステージを用意するだけで大丈夫です。今回は説明のために5ステージ分だけステージを用意しました。ステージを選択するためのシーンも一つ用意してください。今回は[Stageselect]という名前のシーンがこれに該当します。

1-2.[StageSelect]Sceneにボタンを配置する

 ステージを選択させるシーンに移動し、ステージに飛ぶためのボタンを配置します。

tips

ボタンを並べるときに[Inspector]→[Transfrom]の数値をいじったり、マウスでちまちま位置を変えるのがめんどくさいときに使えるのが

この[Vertical Layout Group]

使い方は簡単で複数個のボタンをまとめてこのVertical Layout Groupがアタッチされた空のオブジェクトの下に置くだけ。

これだけでボタンが綺麗に並んでしまいます。ボタンを横に並ばせたいときは[vertical Layout Group]の代わりに[Horizontal Layout Group]を使ってください。[inspector]→[vertical Layout Group]→[Spacing]の値を変更すれば等間隔でボタンが配置されます。

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]関数を指定。下にステージ数を入力します。

StageSlectmanagerの”Script”をドラックしないようにしてください。

これでステージ1を押せばシーンが切り替わるようになりました!

【PR】初心者も安心のサポート充実【DMM FX】

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

     //ここまで
    }

これでステージクリアしたら次のステージがアンロックされるステージ選択システムが完成しました!

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメント

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