rabidus-test/Assets/Scripts/SaveLoadController.cs

77 lines
2.0 KiB
C#

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>(T so, string filename) where T: ScriptableObject
{
string fullDirPath = Application.persistentDataPath + DIR_PATH;
string fullFilePath = Application.persistentDataPath + DIR_PATH + $"{filename}.txt";
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();
return true;
}
public bool Load<T>(ref T so, string filename) where T: ScriptableObject
{
string fullDirPath = Application.persistentDataPath + DIR_PATH;
string fullFilePath = Application.persistentDataPath + DIR_PATH + $"{filename}.txt";
Debug.Log(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<T>();
JsonUtility.FromJsonOverwrite((string)bf.Deserialize(fs), so);
fs.Close();
}
else
{
so = ScriptableObject.CreateInstance<T>();
}
return true;
}
}