public static void SavePersistentCharacterData <T>(this T characterData) where T : IPlayerCharacterData { var savingData = new PlayerCharacterData(); characterData.CloneTo(savingData); if (string.IsNullOrEmpty(savingData.Id)) { return; } savingData.LastUpdate = (int)(System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond); var binaryFormatter = new BinaryFormatter(); var surrogateSelector = new SurrogateSelector(); surrogateSelector.AddAllUnitySurrogate(); surrogateSelector.AddAllCharacterRelatesDataSurrogate(); binaryFormatter.SurrogateSelector = surrogateSelector; var path = Application.persistentDataPath + "/" + savingData.Id + ".sav"; Debug.Log("Character Saving to: " + path); var file = File.Open(path, FileMode.OpenOrCreate); binaryFormatter.Serialize(file, savingData); file.Close(); Debug.Log("Character Saved to: " + path); }
public static T LoadPersistentCharacterData <T>(this T characterData, string path) where T : IPlayerCharacterData { if (File.Exists(path)) { var binaryFormatter = new BinaryFormatter(); var surrogateSelector = new SurrogateSelector(); surrogateSelector.AddAllUnitySurrogate(); surrogateSelector.AddAllCharacterRelatesDataSurrogate(); binaryFormatter.SurrogateSelector = surrogateSelector; var file = File.Open(path, FileMode.Open); PlayerCharacterData loadedData = (PlayerCharacterData)binaryFormatter.Deserialize(file); file.Close(); loadedData.CloneTo(characterData); } return(characterData); }