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

时间:2015-10-21 17:37:59

标签: c# variables unity3d

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

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

something.GetComponent<someScript>().someVariable

但是如何将变量传递给尚未存在的GameObject上的脚本呢?

2 个答案:

答案 0 :(得分:3)

您可以使用PlayerPrefs来解决此问题。例如,在主菜单上设置难度的脚本中,您会说:

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

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

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

您还可以使用DontDestroyOnLoad来跟踪您在永久脚本上的变量,该脚本会保留在一个即使在场景发生变化时仍然加载的对象上。然后,您可以访问所需的变量,类似于您已经描述过的。

答案 1 :(得分:3)

要使变量在下一个场景中可用,标准方法是让场景发生变化时不会被破坏的游戏对象。您可以通过在该游戏对象的任何脚本中调用DontDestroyOnload()来执行此操作,例如

void Awake () {
    DonDestroyOnLoad(gameObject);
}

您可以使用现有游戏对象或仅为此目的创建一个游戏对象,使用一个调用DontDestroyOnload()的脚本,并且还有要传递给下一个场景的变量。您可以在加载下一个场景之前设置变量,如示例代码中所示:

someGameObject.GetComponent<GameVariablesScript>().someVariable = someValue;
相关问题