首页 > 解决方案 > Unity - 使用 Android 设备后退按钮返回上一个场景

问题描述

在 Unity 中,我通过单击 Device Android 后退按钮设法返回到最后一个场景,但问题是当我在第三个场景中时,我想返回到第二个场景,然后再返回到第一个场景。

从第 3 个场景到第 2 个场景,当我单击后退按钮时,它会成功运行,但是当我从第 2 个场景到第一个场景再次按下后退按钮时,它不会去。看起来后退按钮仅第一次起作用。

这是我的 C# 代码:

public class SceneLoader : MonoBehaviour
{
    private float seconds = 0.5f;
    private static int lastScene;
    private int currentScene;

    private void Awake()
    {
        currentScene = SceneManager.GetActiveScene().buildIndex;
    }

    private void Update()
    {
        BackButtonPressed();
    }

    public void LoadNextScene(int numberOfSceneToLoad)
    {
        StartCoroutine(LoadScene(numberOfSceneToLoad));    
    }

    private IEnumerator LoadScene(int numberOfScene)
    {
        currentScene = SceneManager.GetActiveScene().buildIndex;
        SetLastScene(currentScene);

        yield return new WaitForSeconds(seconds);
        SceneManager.LoadScene(numberOfScene);

    }


    private void BackButtonPressed()
    {
        if (Input.GetKey(KeyCode.Escape))
        {
            Debug.Log("Current scene: " + currentScene);
            Debug.Log("Last Scene (scene to load): " + GetLastScene());

            SceneManager.LoadScene(GetLastScene());

            currentScene = GetLastScene();
            Debug.Log("Now the Current scene is: " + currentScene);    
        }
    }


    public static void SetLastScene(int currentSceneToLastScene)
    {
        lastScene = currentSceneToLastScene;
    }

    public static int GetLastScene()
    {
        return lastScene;
    }

    public void QuitGame()
    {
        Application.Quit();
    }

}

提前致谢。

标签: androidunity3dbackscene

解决方案


当您返回 BackToLastScene 时,您设置currentScene = GetLastScene();但从不更改lastScene值。

我建议您使用某种 LIFO 数据结构,例如StackfromSystem.Collections来跟踪场景。

这是一个示例伪代码:

define scene_stack;
function LoadNewScene(new_scene){
    current_scene = GetCurrentScene();
    scene_stack.Push(current_scene);
    LoadScene(new_scene);
}

function LoadOldScene(){
    old_scene = scene_stack.Pop();
    LoadScene(old_scene);
}

推荐阅读