android - 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();
}
}
提前致谢。
解决方案
当您返回 BackToLastScene 时,您设置currentScene = GetLastScene();
但从不更改lastScene
值。
我建议您使用某种 LIFO 数据结构,例如Stack
fromSystem.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);
}
推荐阅读
- string - 如何按字母顺序打印重复次数最多的字母
- c# - XML 到 JSON 有序列表
- python - Django 3.2 将 AutoField 更新为 BigAutoField 向后兼容外键关系
- powershell - PnP PowerShell 更新列表项
- javascript - 如何在 React 的一个 onClick 事件中处理多个布尔状态;
- substrate - 在基板中实现类似 Raft/PBFT 的(授权节点之间的领导者选举)共识算法是否可行?
- java - Vertx JDBC NoSuchMethodError 'java.sql.Connection io.agroal.api.transaction.TransactionIntegration.getConnection()'
- node.js - 在nestjs中使用nodejs依赖或库
- python - 让 Python 检测声音
- aws-sdk-js - GetEntitlementsCommand 因 TypeError 失败:联合必须只有一个非空成员。键 EntitlementValueType、IntegerValue 不为空