[英]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.