C# 重新启动时删除重复的游戏对象

C# 重新启动时删除重复的游戏对象,c#,json,unity3d,gameobject,C#,Json,Unity3d,Gameobject,我有以下创建主菜单的代码: public class EscapeGUI : MonoBehaviour { public GUISkin MySkin; public bool pauseToggle = false; public bool showGUI = false; public bool levelLoaded = false; static string filePath; private List<string> list = new List&l

我有以下创建主菜单的代码:

public class EscapeGUI : MonoBehaviour {

 public GUISkin MySkin;
 public bool pauseToggle = false;
 public bool showGUI = false;
 public bool levelLoaded = false;

 static string filePath;

 private List<string> list = new List<string>();
 private string line;

 void Update() {
     if (!levelLoaded) {
         showGUI = true;
         Time.timeScale = 0;
         Debug.Log ("NO LEVEL LOADED");
     } else {
         if (Input.GetKeyDown (KeyCode.Escape)) {
             pauseToggle = !pauseToggle;
             if (pauseToggle) {
                     Time.timeScale = 0;
                     showGUI = true;
             } else {
                     Time.timeScale = 1;
                     showGUI = false;
             }
         }

         Debug.Log("FILEPATH IS " + filePath);
         Debug.Log("LEVEL IS LOADED");
     }
 }

 void OnGUI() {
     if (showGUI) {

         GUI.skin = MySkin;
         GUILayout.BeginArea (new Rect (Screen.width / 4, Screen.height / 4, 400, Screen.width / 2));

         GUILayout.BeginHorizontal ();
         if (levelLoaded){
             if (GUILayout.Button ("Resume")) {
                 Time.timeScale = 1;
                 showGUI = false;
                 pauseToggle = false;
             }
         }
         GUILayout.EndHorizontal ();

         GUILayout.BeginHorizontal ();
         if (levelLoaded){
             if (GUILayout.Button ("Restart")) {
                 Application.LoadLevel (0);
                 showGUI = false;
                 pauseToggle = false;
                 Time.timeScale = 1;
                 levelLoaded = true;
                 Debug.Log ("Game is restarted with this level: " + filePath);
             }
         }
         GUILayout.EndHorizontal ();

         GUILayout.BeginHorizontal ();
         if (GUILayout.Button ("Load")) {
             filePath = EditorUtility.OpenFilePanel("Select JSON file",Application.streamingAssetsPath,"txt");
             Debug.Log ("Game is loaded with this level: " + filePath);

             StreamReader reader = new StreamReader(filePath);
             while ((line = reader.ReadLine()) != null)
             {
                 list.Add(line);
                 //Debug.Log(line);
             }

             //Do this as soon as the JSON is checked and found to be OK.
             GameObject.Find("Preserved Variables").SendMessage("setFilePath", filePath);

             Time.timeScale = 1;
             levelLoaded = true;
             showGUI = false;
             pauseToggle = false;
         }
         GUILayout.EndHorizontal ();

         GUILayout.BeginHorizontal ();
         if (GUILayout.Button ("Quit")) {
             Application.Quit();
         }
         GUILayout.EndHorizontal ();

         GUILayout.EndArea ();
     }
 }
}
现在的问题是,当我运行这个程序时,我单击“加载”,我选择了我的文件,到目前为止一切都很好。但是,当我单击“重新启动”时,会出现以下两个问题:

1主菜单仅显示“加载”和“退出”,因为它只应在没有加载游戏时显示,所以这只发生在启动时,但我认为这将通过修复nr来修复。2见下文

2加载文件后,只要我单击“重新启动”,游戏对象“保留变量”就会再次生成,但这次它没有附加脚本组件。但原始游戏对象的文件路径已正确更新


如果可以的话,我想问一个额外的小问题,如何从空的游戏对象“保留变量”中重新检索filepath变量,以便在重新启动代码中使用它?

我在那里问了15个多小时,但没有得到响应,这是一件非常紧急的事情,所以我在这里试着运气!不过还是要谢谢你!我被你的问题弄糊涂了。LearnCos2D和我已经尝试通过编辑来改进它。如果你能缩小这个问题的范围并更好地解释它,我可以帮助你。也就是说,我认为你正在摧毁一个游戏对象,当它找不到时,所有的地狱之门都会失去;正在执行?@functor我试图不破坏某个特定的游戏对象,因为我需要检索其中存储的变量,但它会创建它的副本:Sadik yea代码正在执行,因为我可以在控制台中看到日志
public class PreservedVariables : MonoBehaviour {

 public string filePath;

 public static PreservedVariables instance;

 void Awake() {
     if(instance){
         Destroy(this);
     } else {
         DontDestroyOnLoad(this);
         instance = this;
     }
 }

 void setFilePath(string fp) {
     filePath = fp;
 }

 string getFilePath() {
     return filePath;
 }
}