【问题标题】:Accessing information between scenes in Unity在 Unity 中访问场景之间的信息
【发布时间】:2013-11-10 13:57:20
【问题描述】:

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

目前我的切换类如下所示:

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");
    }
}

但是,当我对此进行测试时,没有任何反应。

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

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    选项 #1:

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

    public static class GlobalData
    {
           public static bool SomeBooleanFlag;
    }
    

    这样,在您的第一个场景中,您可以将 GlobalData.SomeBooleanFlag 设置为某个值,然后在您的第二个场景中进行检查。

    选项 #2:

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

    http://docs.unity3d.com/Documentation/ScriptReference/Object.DontDestroyOnLoad.html

    【讨论】:

    • 此外,您可以将数据写入 PlayerPrefs,这有助于在游戏会话之间保存数据。但在这种情况下,我仍然认为静态变量仍然是最好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多