如何将变量传递给另一个场景中的脚本

本文关键字:脚本 另一个 变量 | 更新日期: 2023-09-27 18:18:39

我有一个游戏的主菜单,你可以选择困难,简单,正常等。目前,我为每个难度加载一个单独的场景,我有一个简单的场景,一个正常的场景,一个困难的场景,等等。

我知道你可以在场景之间传递变量,比如

something.GetComponent<someScript>().someVariable

但是你如何将一个变量传递给一个还不存在的GameObject脚本呢?

如何将变量传递给另一个场景中的脚本

你可以使用PlayerPrefs来解决这个问题。例如,在设置难度的主菜单脚本中,你可以这样写:

PlayerPrefs.SetString("Difficulty", "Medium");

然后在下一个场景中,当你需要在不同的脚本中访问该变量时,只需使用:

String difficulty = PlayerPrefs.GetString("Difficulty");

你也可以考虑使用DontDestroyOnLoad来跟踪持久脚本上的变量,即使场景发生变化,它也会在对象上保持加载状态。然后,您可以访问您需要的变量,类似于您已经描述的方式。

要让变量在下一个场景中可用,标准方法是让游戏对象在场景变化时不会被破坏。你可以通过在游戏对象的任何脚本中调用DontDestroyOnload()来实现这一点,例如

void Awake () {
    DonDestroyOnLoad(gameObject);
}

你可以使用一个现有的游戏对象或创建一个只是为了这个目的,用一个脚本调用DontDestroyOnload(),也有变量,你想传递到下一个场景。您可以在加载下一个场景之前设置这些变量,就像您的示例代码一样:

someGameObject.GetComponent<GameVariablesScript>().someVariable = someValue;