Мне было интересно, сможет ли кто-нибудь помочь мне с проблемой, возникшей при сохранении текста поля ввода в двоичном виде. Я делаю инструмент для создания карт с 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];
}
}
}