Unityでjsonファイルを使ったセーブロードの方法(備忘)

 

セーブの全体の流れ

  1. セーブしたい値を保持するクラスを作成
  2. クラスをインスタンス化して値を入力
  3. クラスをJsonに変換
  4. 実際にファイルに書き込む

セーブコード全容

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のスクリプトのインスペクタビューなどから指定します。

 

 

お詫び

やや備忘的な、分かる人にはわかる、での書き方でまとめてしまったので、初心者やコードを動かしたことのない人には、何じゃこのわっかりにくい記事は!? とプンスカしているかもしれません。もし分からなかったら、他の丁寧なサイトで勉強するなりして頑張ってコードの意味を解読してみてください。コード内コメントで何をしているかはなんとなくわかると思いますが・・・。

 



 

ロード全体の流れ

  1. セーブと全く同じ名前のクラスを作成
  2. ディスクに記録したjsonファイルを読み込み
  3. 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 ) をセーブのコードと全く同じにしていないと、セーブ・ロードの動作が実行できないことに注意です。

 

 

 

 

 

コメント

タイトルとURLをコピーしました