【Unity】データセーブロードをするためにJsonUtilityを使ってみた
Unityでのセーブロードの話
今まではcsvファイルにデータを読み書きしていました。
でもcsvだとなんか重い・・・?
というわけで、Jsonファイルに読み書きをしようと思い試してみました。
DataManager.cs
using System.Collections.Generic; using UnityEngine; using System.IO; public class DataManager : SingletonMonoBehaviour<DataManager> { //============================================================= [System.Serializable] public class Data { public List<int> HiScore = new List<int>(); } public Data RunningData; private string dataFilePath; //============================================================= private void Init () { //Instance化をすでにしてるなら if(this != Instance) { Destroy(this); return; } DontDestroyOnLoad(this.gameObject); } private void Awake () { Init(); dataFilePath = Application.persistentDataPath + "/Data.json"; RunningData = LoadData(); if(RunningData == null) { RunningData = CreateData(); SaveData(ConvertDataToJson(RunningData)); } } //============================================================= /// <summary> /// セーブデータの作成 /// </summary> public Data CreateData () { Data data = new Data(); data.HiScore.Add(0); return data; } //============================================================= /// <summary> /// セーブデータをjsonに変換 /// </summary> public string ConvertDataToJson (Data data) { return JsonUtility.ToJson(data); } //============================================================= /// <summary> /// データをセーブ /// </summary> public void SaveData (string jsonData) { using(var file = new FileStream(dataFilePath,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite)) { byte[] bytes = System.Text.Encoding.UTF8.GetBytes(jsonData); file.Write(bytes,0,bytes.Length); } } //============================================================= /// <summary> /// データをロード /// </summary> public Data LoadData () { using(var file = new FileStream(dataFilePath,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite)) { byte[] bytes = new byte[file.Length]; file.Read(bytes,0,bytes.Length); string jsonData = System.Text.Encoding.UTF8.GetString(bytes); return JsonUtility.FromJson<Data>(jsonData); } } }
終わりに
データを使いたいシーンにこれをアタッチしたオブジェクトを配置して使います。
まだまだ改良していきます。