はじめに
シーン遷移する前にフラグを立てて
遷移先で戻るボタンを押した時にそのフラグを見て遷移先を選択していませんか!?(私はしていた)
来た道を簡単に戻る方法を今更ながら知ったのでご紹介します。
使うものはC#のジェネリッククラスであるStackです。
なんでリストではなく、スタックなのかというとスタックや、キューは一時的なストレージ保管に向いている配列とされているからです。出して入れての作業が得意なコレクションです。
実装
まず、遷移のルートを保存していなければもとのシーンには帰れないので
遷移する処理と同時にStackに追加していきます
/// <summary>
/// 来た道を保存しておくためのスタック
/// </summary>
static Stack<string> scenes = new Stack<string>();
public static void SceneChange(string str)
{
// 遷移したいシーン
SceneManager.LoadScene(str)
// 毎回保存
scenes.Push(str);
}
Stackとは後入れ先出しを行うため、例えばシーンを
A => B => C
と遷移した場合だと
scenesには{A,B,C}と保存されていきます。
じゃあ今のCシーンからBシーンに帰ります。
public static void BackScene()
{
scenes.Pop();
SceneManager.LoadScene(scenes.Peek());
}
これだけです。ここで何が起きているかというと
スタックは後入れ先出しなのでPop()で現在一番最後に入ったシーン、つまり、
Cをscenesから取り除きます。
scenesの中身は{A,B}になりました。
そしたらPeek()で現在の最後尾の要素を返せばBに戻ればいいことが分かりますね。(Peek()には削除機能はありません)
最後に
今回ご紹介したコードをもとに2つのシーンを行き来した場合や、シーンに入る前に特別な準備が必要な場合への応用も含めれるかと