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); } BinaryFormatter bf = new BinaryFormatter(); FileStream fs = File.Create(fullFilePath); 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)) { FileStream fs = File.Open(fullFilePath, FileMode.Open); so = ScriptableObject.CreateInstance(); JsonUtility.FromJsonOverwrite((string)bf.Deserialize(fs), so); fs.Close(); } else { so = ScriptableObject.CreateInstance(); } Debug.Log($"LOAD:SUCCESS"); return true; } }