0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

戻るボタンをStackを使ってシンプルに実装する

Last updated at Posted at 2022-10-06

はじめに

シーン遷移する前にフラグを立てて
遷移先で戻るボタンを押した時にそのフラグを見て遷移先を選択していませんか!?(私はしていた)

来た道を簡単に戻る方法を今更ながら知ったのでご紹介します。

使うものは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つのシーンを行き来した場合や、シーンに入る前に特別な準備が必要な場合への応用も含めれるかと

参考文献
Microsoft Ignite Stack クラス
C#(.NET)コレクションの使い分けヒント

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?