JsonUtilityでゲームデータをセーブする方法
(参考)複数のパラメータを保存したい場合の方法
上記を参考に、Unityで実際のテスト環境を作ってみます。
作るスクリプトは、GameDataスクリプトとTestスクリプトになります。
下部にUnityエディタへのアタッチ状態のサンプル画面を添付しています。
スクリプトを作成します。
保存するデータの定義をクラスで宣言するスクリプト。
GameDataクラス(オブジェクトへのアタッチはありません)
using System;
using System.Collections.Generic;
[Serializable]
public class GameData
{
public string name;
public int hp;
public int mp;
public Item item = new Item();
}
[Serializable]
public class Item
{
public List<string> weapon;
public List<string> armor;
}
クラス定義された内容でデータを保存/読み込むスクリプト
Testクラス(Cupsuleオブジェクトへアタッチします)
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class Test : MonoBehaviour
{
string json;
string path;
string fileName = "SaveData.json";
string conbined;
// Use this for initialization
void Start()
{
var gameData = new GameData
{
name = "ファルコン",
hp = 27,
mp = 10
};
gameData.item.weapon = new List<string> { "小型剣", "大剣" };
gameData.item.weapon.Add("片手剣");
gameData.item.armor = new List<string> { "兜", "鎧" };
json = JsonUtility.ToJson(gameData);
Debug.Log(json);
path = Application.persistentDataPath;
conbined = Path.Combine(path, fileName);
Debug.Log(conbined);
File.WriteAllText(conbined, json);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// こっから復元処理
var readJson = File.ReadAllText(conbined);
var saveData = JsonUtility.FromJson<GameData>(readJson);
Debug.Log(saveData.name + ":" + saveData.hp + ":"
+ saveData.mp + ":" + saveData.item.weapon[0] + ":"
+ saveData.item.armor[0]);
// Debug.Log(saveData.hp);
}
}
}
保存されるJsonデータのサンプル(Debug.Logの出力内容を整形)
{
"name": "ファルコン",
"hp": 27,
"mp": 10,
"item": {
"weapon": [
"小型剣",
"大剣",
"片手剣"
],
"armor": [
"兜",
"鎧"
]
}
}
テストのため、Unityへアタッチします。
ここでは、Cupsuleオブジェクトを1つ作って、3つのサンプルスクリプトをアタッチしています。次のシーンでは、スコアランキングのサンプルを実行しています。そのほか、プレイヤーのデータ(HP,MP,持っている武器、防具など)を保持するサンプルと、ハイスコア(ハイスコアを出したプレイヤー、スコア値)を保持するサンプルをアタッチしています。
Unityのリソース保存場所について
保存されている場所
Mac
/Users/(ユーザー名)/Library/Application Support/DefaultCompany/New Unity Project
Windows
C:\Users\(ユーザー名)\AppData\LocalLow\DefaultCompany\New Unity Project
- (ユーザー名)は、OS側での設定です。
- DefaultCompany は、CompanyNameの設定です。
- New Unity Projectは、ProductNameの設定です。
PlayerSettingsの設定
その他、プラットホーム、各メソッドによる保存場所
Unity - Scripting API: PlayerPrefs