using System.Collections; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using UnityEngine; public class SaveLoadController : MonoBehaviour { public static SaveLoadController Instance; private const string DIR_PATH = "/game_save/players/"; private void Awake() { //transform.parent = null; if (Instance == null) { Instance = this; //DontDestroyOnLoad(gameObject); } else if (Instance != this) { Destroy(gameObject); } } public bool Save(T so, string filename) where T : ScriptableObject { string fullDirPath = Application.persistentDataPath + DIR_PATH; string fullFilePath = Application.persistentDataPath + DIR_PATH + $"{filename}.txt"; Debug.Log($"SAVE:{fullFilePath}"); if (!Directory.Exists(fullDirPath)) { Directory.CreateDirectory(fullDirPath); } using (FileStream fs = File.Create(fullFilePath)) { BinaryFormatter bf = new BinaryFormatter(); var json = JsonUtility.ToJson(so); bf.Serialize(fs, json); fs.Close(); } Debug.Log($"SAVE:SUCCESS"); return true; } public bool Load(ref T so, string filename) where T : ScriptableObject { string fullDirPath = Application.persistentDataPath + DIR_PATH; string fullFilePath = Application.persistentDataPath + DIR_PATH + $"{filename}.txt"; Debug.Log($"LOAD:{fullFilePath}"); if (!Directory.Exists(fullDirPath)) { Directory.CreateDirectory(fullDirPath); } BinaryFormatter bf = new BinaryFormatter(); if (File.Exists(fullFilePath)) { using (FileStream fs = File.Open(fullFilePath, FileMode.Open)) { so = ScriptableObject.CreateInstance(); JsonUtility.FromJsonOverwrite((string)bf.Deserialize(fs), so); fs.Close(); } } Debug.Log($"LOAD:SUCCESS"); return true; } }