(ゴールイメージ)
- 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();
}
}