Реализовал в своей игре меню настроек и сохранение данных этих самых настроек. Код для скрипта сохранения делался основываясь на туториал от Brackeys.
Туториал:
Скрипты работают как нужно, ошибок не возникает. Сохранение данных на диск производится с помощью данной команды:
Синтаксис:
Используется csharp
public void SaveDat()
{
SaveSystem.SaveData(this);
}
{
SaveSystem.SaveData(this);
}
Её я вызываю каждый кадр. (Не знаю, насколько правильно перезаписывать данные ~60 раз в секунду, если возникнут проблемы изменю сценарий). Но речь не об этом.
Насколько я понял SaveSystem.SaveData(this); сохраняет абсолютно все внесённые настройки, указанные в скрипте "SaveData" (Я прикрепил его ниже). Однако помимо настроек, перезаписывающихся несколько раз в секунду автоматически возникла необходимость перезаписывать некоторые настройки только в тот момент, когда нажимается кнопка. Иначе говоря мне нужно записывать не все настройки одновременно, а лишь их часть, в то время как сохранение остальных настроек будет вызываться отдельно.
"SaveData" скрипт:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class SaveData
{
public int Mode;
public float SuperRateRoll;
public float RCRateRoll;
public float SuperRatePitch;
public float RCRatePitch;
public float SuperRateYaw;
public float RCRateYaw;
public float SuperRateThrottle;
public float RCRateThrottle;
public SaveData(RatesLoader Rates)
{
Mode = Rates.Mode;
SuperRateRoll = Rates.SuperRateRoll;
RCRateRoll = Rates.RCRateRoll;
SuperRatePitch = Rates.SuperRatePitch;
RCRatePitch = Rates.RCRatePitch;
SuperRateYaw = Rates.SuperRateYaw;
RCRateYaw = Rates.RCRateYaw;
SuperRateThrottle = Rates.SuperRateThrottle;
RCRateThrottle = Rates.RCRateThrottle;
}
}
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class SaveData
{
public int Mode;
public float SuperRateRoll;
public float RCRateRoll;
public float SuperRatePitch;
public float RCRatePitch;
public float SuperRateYaw;
public float RCRateYaw;
public float SuperRateThrottle;
public float RCRateThrottle;
public SaveData(RatesLoader Rates)
{
Mode = Rates.Mode;
SuperRateRoll = Rates.SuperRateRoll;
RCRateRoll = Rates.RCRateRoll;
SuperRatePitch = Rates.SuperRatePitch;
RCRatePitch = Rates.RCRatePitch;
SuperRateYaw = Rates.SuperRateYaw;
RCRateYaw = Rates.RCRateYaw;
SuperRateThrottle = Rates.SuperRateThrottle;
RCRateThrottle = Rates.RCRateThrottle;
}
}
"SaveSystem" скрипт:
Синтаксис:
Используется csharp
using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public static class SaveSystem
{
public static void SaveData(RatesLoader Rates)
{
BinaryFormatter formatter = new BinaryFormatter();
string path = Application.persistentDataPath + "/player.fun";
FileStream stream = new FileStream(path, FileMode.Create);
SaveData data = new SaveData(Rates);
formatter.Serialize(stream, data);
stream.Close();
}
public static SaveData LoadPlayer()
{
string path = Application.persistentDataPath + "/player.fun";
if (File.Exists(path))
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(path, FileMode.Open);
SaveData data = formatter.Deserialize(stream) as SaveData;
stream.Close();
return data;
}
else
{
Debug.LogError("Save file not found in" + path);
return null;
}
}
}
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public static class SaveSystem
{
public static void SaveData(RatesLoader Rates)
{
BinaryFormatter formatter = new BinaryFormatter();
string path = Application.persistentDataPath + "/player.fun";
FileStream stream = new FileStream(path, FileMode.Create);
SaveData data = new SaveData(Rates);
formatter.Serialize(stream, data);
stream.Close();
}
public static SaveData LoadPlayer()
{
string path = Application.persistentDataPath + "/player.fun";
if (File.Exists(path))
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(path, FileMode.Open);
SaveData data = formatter.Deserialize(stream) as SaveData;
stream.Close();
return data;
}
else
{
Debug.LogError("Save file not found in" + path);
return null;
}
}
}
Знаю, вопрос довольно объёмный, буду очень благодарен, если кто-то подскажет, как обстоять с моей проблемой.
Заранее спасибо.