Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一访问场景之间的信息_C#_Unity3d - Fatal编程技术网

C# 统一访问场景之间的信息

C# 统一访问场景之间的信息,c#,unity3d,C#,Unity3d,我在Unity中有一个类,它包含了一个切换开关列表,这些开关在与游戏其余部分不同的场景中打开和关闭。我想要的是让用户选择一个按钮,然后当他们回到那个场景时,在我的主游戏中发生相应的动作。但是,我在场景之间发送信息时遇到问题 目前,我的toggle类如下所示: private bool action1 = false; public bool Action1 { get { return action1;} } void OnGUI() { action1 = GUI.Togg

我在Unity中有一个类,它包含了一个切换开关列表,这些开关在与游戏其余部分不同的场景中打开和关闭。我想要的是让用户选择一个按钮,然后当他们回到那个场景时,在我的主游戏中发生相应的动作。但是,我在场景之间发送信息时遇到问题

目前,我的toggle类如下所示:

private bool action1 = false;
public bool Action1
{
    get { return action1;}
}

void OnGUI() 
{
    action1 = GUI.Toggle(new Rect(10, 10, 100, 30), action1, "test");   
}

void Update()
{
    if(Input.GetButton("Jump"))
    {
        Application.LoadLevel("Main");
    }
}
然后在我的主场景中的一节课上,我有以下代码:

private ActionClass actionIsOn = new ActionClass();
void Start() 
{
    if(actionIsOn.Action1 == true)
    {
        Debug.Log("action is on");
    }
    else
    {
        Debug.Log("nothing happening");
    }
}
然而,当我测试这个时,什么都没有发生

我的设置正确吗?有没有更好的方法将此信息从一个场景传递到另一个场景?

选项1:

使用静态类保存与多个场景相关的全局信息

public static class GlobalData
{
       public static bool SomeBooleanFlag;
}
这样,在第一个场景中可以将GlobalData.SomeBooleanFlag设置为某个值,在第二个场景中可以检查该值

备选案文2:

可以使用Object.DontDestroyOnLoad确保在加载新场景时不会破坏场景中的对象。通过这种方式,您可以在单个对象或使用多个对象中聚合要传递到另一个场景的所有信息,并使它们都保持活动状态,并确保即使在场景发生更改后也保持活动状态


此外,您还可以将数据写入PlayerPrefs,这有利于在游戏会话之间保存数据。但是在这种情况下,我仍然认为静态变量仍然是最好的选择。