Прежде всего: Никогда просто не используйте + "/"
для системных путей к файлам!
У разных целевых устройств могут быть разные файловые системы с разными разделителями пути.
Скорее используйте Path.Combine
, который автоматически вставляет правильные разделители пути в зависимости от операционной системы, в которой он работает.
savePath = Path.combine(Application.persistentDataPath, "gamesave.save");
Затем к основной проблеме:
Свойства типа
public int Stash { get; set; }
public int StashNew { get; set; }
public int Score { get; set; }
не де-сериализированы с помощью BinaryFormatter
!
Поэтому, когда вы делаете
binaryFormatter.Serialize(fileStream, save);
числа даже не записываются в выходной файл!
Тогда при чтении того же самого не работает, и ваши свойства просто сохраняют значение int
по умолчанию 0
.
Просто удалите эти { get; set; }
, чтобы преобразовать ваши свойства в сериализуемые Поля , и все будет в порядке.
public int Stash;
public int StashNew;
public int Score;
Только для демонстрации Я использовал этот код
public class MonoBehaviourForTests : MonoBehaviour
{
[SerializeField] private GameData In;
[SerializeField] private GameData Out;
[ContextMenu("Test")]
private void Test()
{
var formatter = new BinaryFormatter();
using (var fs = File.Open(Path.Combine(Application.streamingAssetsPath, "Example.txt"), FileMode.OpenOrCreate, FileAccess.Write))
{
formatter.Serialize(fs, In);
}
using (var fs = File.Open(Path.Combine(Application.streamingAssetsPath, "Example.txt"), FileMode.Open, FileAccess.Read))
{
Out = (GameData)formatter.Deserialize(fs);
}
}
[Serializable]
private class GameData
{
public int Stash;
public int StashNew;
public int Score;
}
}
Как вы можете видеть, это также имеет побочный эффект, что теперь поля фактически появляются в Инспекторе и могут быть отредактированы. Я записываю значения только в экземпляр In
и после нажатия Test
вы можете видеть их загруженные в экземпляр Out
через файл.
Однако в целом я бы не рекомендовал использовать BinaryFormatter
здесь вообще ... это добавляет много накладных расходов мусор вам совсем не нужен. Просто go, например, JSON или сопоставимый простой формат файла, такой как XML или CSV, в котором хранятся только соответствующие данные.