我有2个场景,希望将信息从一个传递到另一个。我在第一个场景中创建了一个空的游戏对象上的脚本常量,它保留了我希望为下一个场景保存的数据。
这是:
public class Constants : MonoBehaviour {
public string scratchImageFront;
public string scratchImageBack;
void setScratchFront(string _scratchFront)
{
scratchImageFront = _scratchFront;
}
void setScratchBack(string _scratchBack)
{
scratchImageBack = _scratchBack;
}
}
在移动到下一个场景之前,我呼吁不要破坏常量脚本:
GameObject constants = GameObject.Find("Constants");
Constants script;
script = constants.transform.GetComponentInChildren<Constants>();
DontDestroyOnLoad(constants);
Application.LoadLevel("scratch");
然后我在第二个场景中收集数据,一切都很好。在我完成第二个场景后,我会回到第一个场景
Application.LoadLevel("start");
并重做与我第一次相同的步骤,Constants脚本不保留传递给它的新字符串,它保留旧的字符串。为什么?
我需要在第二个场景中销毁Constants脚本,以便一切正常,但我不想这样做。我做错了什么?
答案 0 :(得分:2)
你应该有一个“bootstrap”场景,其中包含所有不会被破坏的东西。这将是第一个场景。它会调用你的“开始”(没有Constants
)并且你总是从后续场景加载“start”,也就是说,自“bootstrap”以来不会创建新的Constants
在开始时总是被称为一次。
答案 1 :(得分:0)
另一个解决方案是创建一个静态类;这是answer.unity上相同问题的链接:http://answers.unity3d.com/questions/334959/not-passing-new-values-to-object-that-has-not-been.html