Unity

【UnityでのJson化】ゲームの進捗・プレイヤーデータを保存する方法【コピペで実装可能】

本記事内には、アフィリエイトリンクを含む場合があります

一発屋のゲームでもない限り、
常にその進捗を保存して、
またその続きからプレイしたいもの!

プレイヤーのレベルや所持金、獲得アイテムなどなど..
保存したいデータは山のようにあります。

そんなときは、Json化による保存を行いましょう。

PlayerPrefsでも保存はできるじゃん? と思われるかもしれませんが、
できることなら、Json化がオススメ。

多くのゲーム開発講座でも、保存にはPlayerPrefが出てきます。
なぜなら、PlayerPrefsはたった1行で保存処理できるので、
初心者が混乱しにくく、わかりやすいからだと思います。

しかし、
実際にゲーム開発に取り組み、
多くのデータを扱うようになってきた場合、
すべてをPlayerPrefsで保存すると、
デバイスへの負荷が増し、処理が重たくなってしまいます。

つまり、データのJson化による保存とその読み込みは
ゲーム開発において必須であると言えます。

私のアプリ"Our Casual Battlefield"でも、
基本的なデータの保存はこの方法で、
自己ベストや獲得コインの数を保存しています。
実例として、参考およびぜひ遊んでみてください^^【宣伝】

 

気を取り直して・・・

本記事では、誰でも真似して学べるように
シンプルなゲームプロジェクトを作り、
Level(int)とそれによって変わるステータス(string)、HP(int)の
保存(SAVE)と読込(LOAD)の実装方法を解説していきます↓

忘れたときにいつでも引用でき、
スムーズなゲーム開発の一助になれば幸いです。

1.サンプルシーンの作成

準備するのはUIだけです。

Textを作成し、適宜Inspectorを設定します。
このTextに後ほどスクリプトで「Player StatusのLv、rank、HP」を表示するようにします。 

次にButtonを作成します。
図のように、Heightを50に、Text内容は「LEVEL UP」とします。

1つ作ったら、ctrl+Dで複製し、SAVE Button配置(Rect Transform)を変更します。

C#ScriptでPlayerManager.csを作成し、Canvasオブジェクトにアタッチします。

PlayerManager.csの内容は、次の通り↓

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerManager : MonoBehaviour
{
    [SerializeField] Text statusText;
    int level; 
    string rank;
    int hp;

    // Start is called before the first frame update
    void Start()
    {
        //初期値
        level = 1;
        rank = "Amateur";
        hp = 100;

        //Text内容
        statusText.text = "PLAYER STATUS\nLevel: " + level + "\nRank: " + rank + "\nHP: " + hp;
    }

    //LEVEL UP Buttonクリックで呼ぶ関数
    public void OnClickLevelUp()
    {
        level += 1;
        if(level == 5)
        {
            rank = "Professional";
            hp = 150;
        }

        //Text内容
        statusText.text = "PLAYER STATUS\nLevel: " + level + "\nRank: " + rank + "\nHP: " + hp; 
    }
}

Inspectorにて
Status Textを紐付け、
LEVEL UP ButtonのOnClick関数に、OnClickLevelUp()を紐付けします。

ここで、いったん実行してLEVEL UP Buttonで
ステータスが変わっていくか確認してみましょう。

Levelが5になったら、Rank、HPが変わります。

 

しかし、ゲームをもう一度実行すると、また初期値に戻ってしまいます。

それでは、これらのステータスをJson化によって保存していきます。

2.Json化によるSaveの実装

Json化のセーブには2つのスクリプトを作成します。

PlayerPrefsに比べると、面倒に思うかもしれませんが、
かなりシンプルなスクリプトで、
一度作成してしまえばセーブしたい他のシーンでも、スクリプトを使い回せます。

ABOUT ME
いなも@システマライフハッカー
”仙豆”を開発することを夢見て、健康食品会社で働いていたものの、2016年に出会ったロシアの武術”システマ”こそ、その糸口があると感銘し、勝手にシステマ普及活動を始める。 一方で、クリエイティブなモノ作りが好きで、DX社会で楽しみを見出せる"Unity”を活かして、”スマートかつ快適な暮らし”のヒントを発信している。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA