我正在编写一个自上而下的 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
}
}
}
一旦我到达检查点,这部分就可以正确保存场景,但不会在场景之间保存。
我已经被困在这个问题上有一段时间了,它阻碍了游戏的进展,所以任何见解将不胜感激。
首先,您做了正确的事情,将数据保存在与场景无关的位置(在您的情况下,脚本中的对象标记为 DontDestroyOnLoad,但这不是唯一的选择),以防止您的存储被破坏加载新场景时。
现在,您必须确定需要保存什么。当场景被卸载时,指向它的变量将变得不正确。所以保存
Scene
不是一个选择。您可以使用索引或场景名称,以便稍后在 LoadScene
调用中使用。应该可以。
所以,你走在正确的道路上。只需要稍微纠正一下您目前的情况即可。