JsonUtilityでゲームデータをセーブする方法

 

 

(参考)複数のパラメータを保存したい場合の方法

ooee-81.hatenablog.com

 

上記を参考に、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,持っている武器、防具など)を保持するサンプルと、ハイスコア(ハイスコアを出したプレイヤー、スコア値)を保持するサンプルをアタッチしています。

f:id:hidepon4162:20181028145305p:plain:w1000



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の設定

f:id:hidepon4162:20181028123753p:plainw:1000

その他、プラットホーム、各メソッドによる保存場所

steppe.hatenablog.com

 

Unity - Scripting API: PlayerPrefs