如何在Unity中保存/加载检查点场景?

问题描述 投票:0回答:1

我正在编写一个自上而下的 2D Unity 游戏。有一个房间(单独的场景),里面有一个敌人和一个检查站。我试图做到这一点,以便我可以去检查站,让它记录我的位置和当前场景,然后死于敌人并在同一个房间重生。检查点设置了正确的变量,但是,当我死于敌人并将场景切换到死亡屏幕时,保存的场景变量又恢复为空。

简短版本 - Unity 不会在场景之间保存变量。

我尝试将玩家(具有已保存的场景变量)放入 DontDestroyOnLoad 中,看看它是否只是没有在场景之间保存玩家,但这不起作用。我还尝试创建一个静态变量来保存检查点场景,但这非常令人困惑,我不确定我是否一切都正确。

静态代码(这是在它自己的脚本中)

public class SaveScene
{
    public static Scene SavedScene { get; set; }
}

再次,我不知道我是否正确完成了这部分,因此我们将不胜感激任何帮助。

检查点脚本

public class Checkpoint : MonoBehaviour
{
    private void Update()
    {
        
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.transform.tag == "Player")
        {
            SaveScene.SavedScene = SceneManager.GetActiveScene(); //calls to static 
            PlayerMovement.lastCheckPointPos = transform.position; //saves the location for player
        }
    }
}

一旦我到达检查点,这部分就可以正确保存场景,但不会在场景之间保存。

我已经被困在这个问题上有一段时间了,它阻碍了游戏的进展,所以任何见解将不胜感激。

c# unity-game-engine 2d
1个回答
0
投票

首先,您做了正确的事情,将数据保存在与场景无关的位置(在您的情况下,脚本中的对象标记为 DontDestroyOnLoad,但这不是唯一的选择),以防止您的存储被破坏加载新场景时。

现在,您必须确定需要保存什么。当场景被卸载时,指向它的变量将变得不正确。所以保存

Scene
不是一个选择。您可以使用索引或场景名称,以便稍后在
LoadScene
调用中使用。应该可以。

所以,你走在正确的道路上。只需要稍微纠正一下您目前的情况即可。

© www.soinside.com 2019 - 2024. All rights reserved.