JsonUtilityを使ったやり方です。
使用するときはusing System.IO;を追加します。
最初に以下2つのスクリプトを作成します。
・SaveData
・SaveManager
SaveDataはセーブデータに使うための変数を
まとめたもの。
SaveManagerは実際の処理するものです。
SaveDataの内容は以下。
クラスの前に[System.Serializable]をつけます。
独自クラスを利用する場合も
そのクラスにつける必要があります。
今回は簡単にお金とステータスの情報をもつ
int変数を定義しています。
SaveManagerの内容は以下 長いのでAwake()処理のみ記載
初期処理は最初にファイルパスを設定しています。
Application.persistentDataPathはWindowsの場合は以下。
C:/Users/xxxx/AppData/LocalLow/CompanyName/ProductName
xxxxはPCのユーザ名
CompanyName/ProductNameはビルド設定→プレイヤー設定の
企業名、プロダクト名になります。
instanceはシーン変更した時用です。
一つのシーンで作る場合は不要です。
セーブ処理は以下です。
そのデータを指定したファイルに書き込みます。
ロード処理
以下は処理確認用です。
確認用にセーブロードボタンを作成します。
ロード後はそれを表示します。
一旦セーブボタンをおして指定のファイルが
作られているか確認します。
終了させてからもう一度起動してロードボタンを押します。
保存する値の変数はSaveManager自体で持ってもいいですが、
ゲームで使う変数を管理するクラスを別途作って
そこで持っておいた方がいいかと思います。
使用するときはusing System.IO;を追加します。
最初に以下2つのスクリプトを作成します。
・SaveData
・SaveManager
SaveDataはセーブデータに使うための変数を
まとめたもの。
SaveManagerは実際の処理するものです。
SaveDataの内容は以下。
using UnityEngine;
[System.Serializable]
public class SaveData
{
public int Money;
//独自クラスを利用する場合
public MainStData Status;
}
[System.Serializable]
public struct MainStData
{
public int Hp;
public int Mp;
}
[System.Serializable]
public class SaveData
{
public int Money;
//独自クラスを利用する場合
public MainStData Status;
}
[System.Serializable]
public struct MainStData
{
public int Hp;
public int Mp;
}
クラスの前に[System.Serializable]をつけます。
独自クラスを利用する場合も
そのクラスにつける必要があります。
今回は簡単にお金とステータスの情報をもつ
int変数を定義しています。
SaveManagerの内容は以下 長いのでAwake()処理のみ記載
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
public class SaveManager : MonoBehaviour
{
//ファイル
string filePath;
public static SaveData save = new SaveData();
public static SaveManager instance;
int money;
MainStData Status;
public Text[] Text; //表示用
void Awake()
{
filePath = Application.persistentDataPath + "/" + ".savedata.json";
if (instance != null)
{
Destroy(gameObject);
return;
}
else
{
instance = this;
DontDestroyOnLoad(this);
}
}
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
public class SaveManager : MonoBehaviour
{
//ファイル
string filePath;
public static SaveData save = new SaveData();
public static SaveManager instance;
int money;
MainStData Status;
public Text[] Text; //表示用
void Awake()
{
filePath = Application.persistentDataPath + "/" + ".savedata.json";
if (instance != null)
{
Destroy(gameObject);
return;
}
else
{
instance = this;
DontDestroyOnLoad(this);
}
}
初期処理は最初にファイルパスを設定しています。
Application.persistentDataPathはWindowsの場合は以下。
C:/Users/xxxx/AppData/LocalLow/CompanyName/ProductName
xxxxはPCのユーザ名
CompanyName/ProductNameはビルド設定→プレイヤー設定の
企業名、プロダクト名になります。
instanceはシーン変更した時用です。
一つのシーンで作る場合は不要です。
セーブ処理は以下です。
public void Save()
{
//セーブデータ
save.Money = money;
save.Status.Hp = Status.Hp;
save.Status.Mp = Status.Mp;
string json = JsonUtility.ToJson(save);
StreamWriter streamWriter = new StreamWriter(filePath);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
保存する値を定義したSaveData型のsaveに入れ、{
//セーブデータ
save.Money = money;
save.Status.Hp = Status.Hp;
save.Status.Mp = Status.Mp;
string json = JsonUtility.ToJson(save);
StreamWriter streamWriter = new StreamWriter(filePath);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
そのデータを指定したファイルに書き込みます。
ロード処理
public void Load() //ロード
{
if (File.Exists(filePath))
{
StreamReader streamReader;
streamReader = new StreamReader(filePath);
string data = streamReader.ReadToEnd();
streamReader.Close();
save = JsonUtility.FromJson<SaveData>(data);
//ロードデータ
money = save.Money;
Status.Hp = save.Status.Hp;
Status.Mp = save.Status.Mp;
}
else //初回起動時
{
//初回のみ処理する場合
}
}
ファイルが存在したらデータをロードします。{
if (File.Exists(filePath))
{
StreamReader streamReader;
streamReader = new StreamReader(filePath);
string data = streamReader.ReadToEnd();
streamReader.Close();
save = JsonUtility.FromJson<SaveData>(data);
//ロードデータ
money = save.Money;
Status.Hp = save.Status.Hp;
Status.Mp = save.Status.Mp;
}
else //初回起動時
{
//初回のみ処理する場合
}
}
以下は処理確認用です。
確認用にセーブロードボタンを作成します。
public void SaveBtn() //Saveボタンクリック
{
money = 5000;
Status.Hp = 100;
Status.Mp = 80;
Save();//セーブ
}
public void LoadBtn() //Saveボタンクリック
{
Load();//ロード
//表示
Text[0].text = money.ToString();
Text[1].text = Status.Hp.ToString();
Text[2].text = Status.Mp.ToString();
}
セーブするときにテスト用に値をいれてセーブ処理をしています。{
money = 5000;
Status.Hp = 100;
Status.Mp = 80;
Save();//セーブ
}
public void LoadBtn() //Saveボタンクリック
{
Load();//ロード
//表示
Text[0].text = money.ToString();
Text[1].text = Status.Hp.ToString();
Text[2].text = Status.Mp.ToString();
}
ロード後はそれを表示します。
一旦セーブボタンをおして指定のファイルが
作られているか確認します。
終了させてからもう一度起動してロードボタンを押します。
保存する値の変数はSaveManager自体で持ってもいいですが、
ゲームで使う変数を管理するクラスを別途作って
そこで持っておいた方がいいかと思います。
0 件のコメント:
コメントを投稿