(Unity)コンティニューボタンの実装(直前のシーン名を取得してそこに戻る方法。静的クラス)

(ゴールイメージ)

  • Stage1シーンでゲームオーバーになった場合には、コンティニューボタンでStage1シーンに戻る。
  • Stage2シーンでゲームオーバーになった場合には、コンティニューボタンでStage2シーンに戻る。


(スクリプトの作成)

<SceneController>

  • 新規にC#スクリプトを作成
  • 名前を「SceneController」に変更
  • このスクリプトは「静的クラス」にする(ポイント)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

// (ポイント)
// staticクラス(静的クラス)に変更すること
// メソッドも全てstatic(静的メソッド)にすること
// MonoBehaviourクラスは削除すること
public static class SceneController
{
    public static string sceneName;

    // 「このメソッドが実行された時に開いているシーンの名前」を取得する。
    // 今回の場合は、ゲームオーバーの条件が揃った時に、このメソッドを呼び出す。
    public static void CurrentSceneName()
    {
        sceneName = SceneManager.GetActiveScene().name;
        Debug.Log(sceneName);
    }

    // 上記のメソッドで取得されたシーンに戻る。
    // 今回の場合は、コンティニューボタンを押した時にこのメソッドを実行する。
    public static void BackToBeforeScene()
    {
        SceneManager.LoadScene(sceneName);
    }
}

<Ball>

*今回はシンプルに、ボールが床に触れたらゲームオーバーとします。

  • 新規にC#スクリプトを作成
  • 名前を「Ball」に変更
  • SceneControllerクラス(静的クラス)の中にあるCurrentSceneメソッド(静的メソッド)を実行する(ポイント)
  • これでゲームオーバーになった瞬間、このシーンの名前情報を取得することができます、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Ball : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        // 現在のシーンの名前を取得する。
        // 「静的クラス」の中の「静的メソッド」を実行する。
        // 静的クラスはインスタンスしなくても実行できる(ポイント)
        SceneController.CurrentSceneName();

        SceneManager.LoadScene("GameOver");
    }
}

<Continue>

*UIでコンティニューボタンを作成すること

  • 新規にC#スクリプトを作成
  • 名前を「Continue」に変更
  • SceneControllerクラス(静的クラス)の中にあるBackToBeforeSceneメソッド(静的メソッド)を実行する(ポイント)
  • これでボタンを押した際に、直前のシーンに戻ります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Continue : MonoBehaviour
{
    public void OnContinueButtonClicked()
    {
        // 直前のシーンに遷移する。
        SceneController.BackToBeforeScene();
    }
}