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