73 lines
1.9 KiB
C#
73 lines
1.9 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 const string FILE_PATH = "players.txt";
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
if(Instance == null)
|
||
|
{
|
||
|
Instance = this;
|
||
|
}
|
||
|
else if (Instance != this)
|
||
|
{
|
||
|
Destroy(this);
|
||
|
}
|
||
|
DontDestroyOnLoad(this);
|
||
|
}
|
||
|
|
||
|
public void Save<T>(T so) where T: ScriptableObject
|
||
|
{
|
||
|
string fullDirPath = Application.persistentDataPath + DIR_PATH;
|
||
|
string fullFilePath = Application.persistentDataPath + DIR_PATH + FILE_PATH;
|
||
|
|
||
|
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();
|
||
|
}
|
||
|
|
||
|
public void Load<T>(ref T so) where T: ScriptableObject
|
||
|
{
|
||
|
string fullDirPath = Application.persistentDataPath + DIR_PATH;
|
||
|
string fullFilePath = Application.persistentDataPath + DIR_PATH + FILE_PATH;
|
||
|
|
||
|
Debug.Log(fullFilePath);
|
||
|
Debug.Log(fullDirPath);
|
||
|
|
||
|
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>();
|
||
|
}
|
||
|
}
|
||
|
}
|