セーブの全体の流れ
- セーブしたい値を保持するクラスを作成
- クラスをインスタンス化して値を入力
- クラスをJsonに変換
- 実際にファイルに書き込む
セーブコード全容
Save_Deedスクリプトを作成した場合のセーブを行う際のコード全容を書きました。using System.Collections; と using System.Collections.Generic; はいらないかもしれませんが、using System.IO;は必ず必要です。以下ここから実際のコード↓
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
1 セーブしたい値を保持するクラスを作成
public class SaveDeed : MonoBehaviour
{
public class Cl_GamePlayInfomation
{
public int I_Difficulty;
}
public string Str_SaveJson_0;
2、クラスをインスタンス化して値を入力 3、クラスをJsonに変換 4、実際にファイルに書き込む
public void SaveStreamWrite_File1()
{
// ① セーブする用のインスタンスを作成
Cl_GamePlayInfomation Ins_GamePlayInfomation = new Cl_GamePlayInfomation();
// ② インスタンスに値を入れる(実際はStatic変数などから値を取得)
Ins_GamePlayInfomation.I_Difficulty = 2
// ③ クラスをJsonに変換
Str_SaveJson_0 = JsonUtility.ToJson(Ins_GamePlayInfomation);
// ④ 実際にファイルに書き込む
StreamWriter Stm_Writer_0;
Stm_Writer_0 = new StreamWriter(Application.dataPath + Str_SaveFileName + “.json”,false);
Stm_Writer_0.Write(Str_SaveJson_0);
Stm_Writer_0.Flush();
Stm_Writer_0.Close();
}
}
※ Str_SaveFileName には任意のセーブするパス名(ファイル名)を入力
フォルダーを自動的に作成する関数
public void CreateFolder_if_Not_Exists(string _FolderName)
{
// フォルダがない場合は作成
Str_SaveFolderPath = Application.dataPath + Path.DirectorySeparatorChar + _FolderName;
// フォルダがない場合は作成
if (Directory.Exists(Str_SaveFolderPath) == true)
{
}
else
{
Directory.CreateDirectory(Str_SaveFolderPath);
}
}
※ Path.DirectorySeparatorChar にはWindows、Macに対応したディレクトリを仕切る記号 ¥ / が自動的に入る関数です。(Macが/だったかはうろ覚え、間違ってたらすまん。)
※ _FolderName には自分の好きなディレクトリ名をUnityのスクリプトのインスペクタビューなどから指定します。
お詫び
やや備忘的な、分かる人にはわかる、での書き方でまとめてしまったので、初心者やコードを動かしたことのない人には、何じゃこのわっかりにくい記事は!? とプンスカしているかもしれません。もし分からなかったら、他の丁寧なサイトで勉強するなりして頑張ってコードの意味を解読してみてください。コード内コメントで何をしているかはなんとなくわかると思いますが・・・。
ロード全体の流れ
- セーブと全く同じ名前のクラスを作成
- ディスクに記録したjsonファイルを読み込み
- jsonファイルからクラスへと変換し値を取得
ロードのコード全容
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
public class LoadDeed : MonoBehaviour
{
public class Cl_GamePlayInfomation
{
public int I_Difficulty;
}
public void LoadStreamRead_File1()
{
// ① ファイルからセーブデータを読み込み
StreamReader Stm_Reader_0;
Stm_Reader_0 = new StreamReader(Application.dataPath + Str_LoadFileName + “.json”);
Str_LoadJson_0 = Stm_Reader_0.ReadToEnd();
Stm_Reader_0.Close();
// ② Jsonからクラスへ代入
Cl_GamePlayInfomation Ins_GamePlayInfomation = JsonUtility.FromJson<Cl_GamePlayInfomation>(Str_LoadJson_0);
// ③ クラスから変数へ値を取得(実際はStatic変数へやり取りすることが多い)
I_Difficulty = Ins_GamePlayInfomation.I_Difficulty
}
}
※ スクリプトをセーブとロードで分けたときなどは
宣言するクラス名 ( 今回の場合は Cl_GamePlayInfomation ) をセーブのコードと全く同じにしていないと、セーブ・ロードの動作が実行できないことに注意です。
コメント