繁体   English   中英

将场景中的所有InputField文本保存到二进制文件中,然后将其加载回Unity

[英]Saving all InputField text in scene into a binary file and loading them back up Unity

我想知道是否有人可以将输入字段文本保存为二进制而遇到的问题。 我正在使用Unity做一个路线图工具,并且试图通过列表将输入字段的所有文本保存到二进制文件中,并在按下加载按钮时将它们重新加载到游戏中,我很确定输入字段已正确保存,因为我的计算机上有一个文件,但是我不确定如何将它们全部备份。

我目前保存的代码看起来不错,但是当尝试加载数据时,它不会更改任何输入字段文本,现在我知道我把LoadPlan()方法做错了,因为我无法弄清楚如何正确加载它,所以我为什么在这里。 如果有人可以帮忙,我将非常感激。

这是我的代码:

SaveSystem.cs

public static void SaveUser(FieldController controller)
   {
       BinaryFormatter formatter = new BinaryFormatter();

       string path = Application.persistentDataPath + "/user.frostbyte";
       FileStream stream = new FileStream(path, FileMode.Create);

       UserData data = new UserData(controller);

       formatter.Serialize(stream, data);
       stream.Close();
   }

public static UserData LoadData()
   {
       string path = Application.persistentDataPath + "/user.frostbyte";
       if(File.Exists(path))
       {
           BinaryFormatter formatter = new BinaryFormatter();
           FileStream stream = new FileStream(path, FileMode.Open);

           UserData data = formatter.Deserialize(stream) as UserData;
           stream.Close();

           return data;
       }
       else
       {
           Debug.LogError("Save file not found in " + path);
           return null;
       }
   }

UserData.cs

public static List<string> inputFieldText = new List<string>();

   public UserData (FieldController fieldController)
   {
       foreach (InputField inputField in GameObject.FindObjectsOfType<InputField>())
       {
           foreach (TextMeshProUGUI text in inputField.GetComponentsInChildren<TextMeshProUGUI>())
           {
               if (text.gameObject.name != "Placeholder")
                   inputFieldText.Add(text.text);
           }
       }
   }

FieldController.cs

public void SavePlan()
   {
       SaveSystem.SaveUser(this);
   }

   public void LoadPlan()
   {
       UserData data = SaveSystem.LoadData();

       foreach (InputField inputField in GameObject.FindObjectsOfType<InputField>())
       {
           foreach (TextMeshProUGUI text in inputField.GetComponentsInChildren<TextMeshProUGUI>())
           {
               if (text.gameObject.name != "Placeholder")
                   text.text = UserData.inputFieldText[0];
           }
       }
   }

我想知道是否有人可以将输入字段文本保存为二进制而遇到的问题。 我正在使用Unity做一个路线图工具,并且试图通过列表将输入字段的所有文本保存到二进制文件中,并在按下加载按钮时将它们重新加载到游戏中,我很确定输入字段已正确保存,因为我的计算机上有一个文件,但是我不确定如何将它们全部备份。

我目前保存的代码看起来不错,但是当尝试加载数据时,它不会更改任何输入字段文本,现在我知道我把LoadPlan()方法做错了,因为我无法弄清楚如何正确加载它,所以我为什么在这里。 如果有人可以帮忙,我将非常感激。

这是我的代码:

SaveSystem.cs

public static void SaveUser(FieldController controller)
   {
       BinaryFormatter formatter = new BinaryFormatter();

       string path = Application.persistentDataPath + "/user.frostbyte";
       FileStream stream = new FileStream(path, FileMode.Create);

       UserData data = new UserData(controller);

       formatter.Serialize(stream, data);
       stream.Close();
   }

public static UserData LoadData()
   {
       string path = Application.persistentDataPath + "/user.frostbyte";
       if(File.Exists(path))
       {
           BinaryFormatter formatter = new BinaryFormatter();
           FileStream stream = new FileStream(path, FileMode.Open);

           UserData data = formatter.Deserialize(stream) as UserData;
           stream.Close();

           return data;
       }
       else
       {
           Debug.LogError("Save file not found in " + path);
           return null;
       }
   }

UserData.cs

public static List<string> inputFieldText = new List<string>();

   public UserData (FieldController fieldController)
   {
       foreach (InputField inputField in GameObject.FindObjectsOfType<InputField>())
       {
           foreach (TextMeshProUGUI text in inputField.GetComponentsInChildren<TextMeshProUGUI>())
           {
               if (text.gameObject.name != "Placeholder")
                   inputFieldText.Add(text.text);
           }
       }
   }

FieldController.cs

public void SavePlan()
   {
       SaveSystem.SaveUser(this);
   }

   public void LoadPlan()
   {
       UserData data = SaveSystem.LoadData();

       foreach (InputField inputField in GameObject.FindObjectsOfType<InputField>())
       {
           foreach (TextMeshProUGUI text in inputField.GetComponentsInChildren<TextMeshProUGUI>())
           {
               if (text.gameObject.name != "Placeholder")
                   text.text = UserData.inputFieldText[0];
           }
       }
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM