簡體   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