Я создаю игру и использую ее в качестве системы сохранения / загрузки, затем сохраняю данные в отдельном скрипте «GameData».Когда я впервые пытаюсь запустить игру, я получаю следующую ошибку:
Исключение сериализации: Попытка десериализации пустого потока.
Я пытался проверить, была ли длинабольше 0 и попытался попробовать / поймать версию.Оба они получают ту же ошибку, и она застревает в цикле.Возможно, есть способ проверить, если вы впервые открываете игру и сохраняете ее первым?Я бы предпочел просто найти способ убедиться, что в файле есть данные перед загрузкой.Или, может быть, я мог бы создать данные вместо использования null
?Мы будем благодарны за любую помощь.
Это полная версия скрипта.
using UnityEngine;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System;
public static class SaveSystem
{
public static void SaveData(PlayerCollision playerCol)
{
BinaryFormatter formatter = new BinaryFormatter();
string path = Application.persistentDataPath + "/player.fun";
FileStream stream = new FileStream(path, FileMode.Create);
GameData data = new GameData(playerCol);
formatter.Serialize(stream, data);
stream.Close();
}
public static GameData LoadData()
{
string path = Application.persistentDataPath + "/player.fun";
if (File.Exists(path) && path.Length > 0)
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(path, FileMode.Open);
GameData data = formatter.Deserialize(stream) as GameData;
stream.Close();
return data;
}
else
{
Debug.LogError("Save file was not found in " + path);
return null;
}
}
}
Это версия скрипта try / catch.
using UnityEngine;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System;
public static class SaveSystem
{
public static void SaveData(PlayerCollision playerCol)
{
BinaryFormatter formatter = new BinaryFormatter();
string path = Application.persistentDataPath + "/player.fun";
FileStream stream = new FileStream(path, FileMode.Create);
GameData data = new GameData(playerCol);
formatter.Serialize(stream, data);
stream.Close();
}
public static GameData LoadData()
{
try
{
string path = Application.persistentDataPath + "/player.fun";
if (File.Exists(path))
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(path, FileMode.Open);
GameData data = formatter.Deserialize(stream) as GameData;
stream.Close();
return data;
}
else
{
Debug.LogError("Save file was not found in " + path);
return null;
}
}
catch (System.Exception e)
{
Debug.LogError("Error Loading Save " + e);
return null;
}
}
}