LoginSignup
0
1

スタックを使用して、ひとつ前のシーンに戻る

Posted at

ドラクエなどのRPGでよくあるフィールドマップと戦闘の切り替えに使えます。
応用すればUIの遷移も作れます。

まず、ひとつ前のシーンを保持するSceneStackクラスを作ります。
このとき、ScriptableObjectを継承します。
ScriptableObjectは、シーンを読み込んでも変数の値を保持してくれるので、今回のケースに最適です。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

[CreateAssetMenu]
public class SceneStack : ScriptableObject
{
    private Stack<Scene> scenes = new Stack<Scene>();

    // シーンをスタックから取り出す
    public Scene Pop()
    {
        return scenes.Pop();
    }

    // シーンをスタックに積む
    public void Push(Scene scene)
    {
        scenes.Push(scene);
    }
}

つぎに、シーンをスタックに積んでから読み込むスクリプトを書きます。

using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneLoader : MonoBehaviour
{
    public SceneStack scenes;
    public SceneAsset scene;

    public void Load()
    {
        scenes.Push(SceneManager.GetActiveScene());
        SceneManager.LoadSceneAsync(scene.name);
    }
}

つぎに、ひとつ前のシーンに戻るスクリプトを書きます。

using UnityEngine;
using UnityEngine.SceneManagement;

public class BackScene : MonoBehaviour
{
    public SceneStack scenes;

    public void Back()
    {
        var scene = scenes.Pop();
        SceneManager.LoadSceneAsync(scene.buildIndex);
    }
}

これらを組み合わせることで、ひとつ前のシーンに戻ることができます。
また、スタックにシーンを積んでいくので前の前のシーンに戻ることもできます。

今回はAddressableを使いませんでしたが、スタックの型をAssetReferenceにすることで対応可能です。

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