武器やステータスもまとめて保存!Unityで自作クラスをJSON化→PlayerPrefsへ【初心者OK】
はじめに
「キャラクターの名前やレベル、装備品など、バラバラな情報をひとまとめに管理したい!」——Unityでゲーム開発をしていると、そんな場面に出くわすことはありませんか?
とはいえ、PlayerPrefsは文字列しか扱えないため、そのままだと複雑なデータ構造は保存しづらいですよね。そこで活躍するのがJSON形式。
本記事では、“自作クラスをJSON形式に変換してPlayerPrefsへ保存・読み込みする”手順を、初心者向けにわかりやすく解説します。武器やステータスをまるごとまとめてセーブするイメージで読んでみてください。
Unityの基本操作からC#スクリプトの基礎まで、やさしく学べる入門チュートリアルはこちら
1. JSON形式とは?
JSON(JavaScript Object Notation) は、複数の数値や文字列などをオブジェクトとしてまとめ、テキスト形式でやり取りできる軽量なデータ交換フォーマットです。
- ゲーム開発やWeb開発など、幅広い分野で利用されており、「人にも機械にも読みやすい」のが大きな特徴です。
- Unityには、このJSON形式を簡単に扱えるJsonUtilityクラスが標準搭載されているため、複雑なクラスやリストでもシンプルにセーブ&ロードできます。
2. UnityでJSONを扱う準備
Unityでは、JsonUtilityを使うだけでオブジェクトをJSON文字列に変換したり、逆にJSON文字列をもとにオブジェクトを復元したりできます。
-
[System.Serializable] 属性
自作クラスをJSON化するには、クラスに[System.Serializable]
を付与し、シリアライズ可能にする必要があります。 -
JsonUtility.ToJson
オブジェクトをJSON文字列へ変換するメソッド。string json = JsonUtility.ToJson(data);
-
JsonUtility.FromJson
JSON文字列を元にオブジェクトを復元するメソッド。PlayerData data = JsonUtility.FromJson<PlayerData>(json);
3. 自作クラスをJSON形式に変換して保存する流れ
ここでは、キャラクターの名前・スコア・レベルなどをまとめた「自作クラス」をJSON形式で保存し、PlayerPrefsから読み込むサンプルを見ていきましょう。
スクリプト例
using UnityEngine;
[System.Serializable] // クラスをシリアライズ可能にする
public class PlayerData
{
public string playerName;
public int score;
public int level;
public PlayerData(string name, int score, int level)
{
this.playerName = name;
this.score = score;
this.level = level;
}
}
public class PlayerPrefsJsonExample : MonoBehaviour
{
private const string PlayerDataKey = "PlayerData";
void Start()
{
// データの保存
PlayerData player = new PlayerData("UnityMaster", 100, 5);
SavePlayerData(player);
// データの読み込み
PlayerData loadedPlayer = LoadPlayerData();
Debug.Log($"Player Name: {loadedPlayer.playerName}, Score: {loadedPlayer.score}, Level: {loadedPlayer.level}");
}
// クラスをJSON形式の文字列に変換し、PlayerPrefsに保存する
void SavePlayerData(PlayerData data)
{
string json = JsonUtility.ToJson(data);
PlayerPrefs.SetString(PlayerDataKey, json);
PlayerPrefs.Save();
Debug.Log($"データが保存されました: {json}");
}
// PlayerPrefsから読み込み、JSON形式の文字列をクラスに変換する
PlayerData LoadPlayerData()
{
string json = PlayerPrefs.GetString(PlayerDataKey, "{}"); // デフォルト値として空のJSON
return JsonUtility.FromJson<PlayerData>(json);
}
}
-
SavePlayerDataでは、自作クラス(
PlayerData
)をJsonUtility.ToJson
で文字列化し、PlayerPrefs.SetString
で保存しています。 -
LoadPlayerDataでは、文字列を
PlayerPrefs.GetString
で取得し、JsonUtility.FromJson
を使ってPlayerData
に戻します。
4. 詳細解説
-
[System.Serializable] 属性
これを付けないと、JsonUtility.ToJson
でクラスを変換できません。自作クラスには必ず付けましょう。 -
JsonUtility.ToJson / FromJson
-
ToJson:
Object → JSON文字列
-
FromJson:
JSON文字列 → Object
この2つが基本的な変換の流れになります。
-
ToJson:
-
PlayerPrefsにJSONを保存
-
PlayerPrefs.SetString("キー名", 文字列)
で保存し、PlayerPrefs.Save()
を呼び出します。 - 文字列として保存できるので、クラスのどんなパラメータでもまとめてセーブできるのがポイントです。
-
5. 応用例:複数プレイヤーデータを保存
もし複数のキャラクターや装備データを一気に管理したい場合、リストや配列をまとめたクラスを作り、それをJSON化すればOKです。
スクリプト例
using UnityEngine;
using System.Collections.Generic;
[System.Serializable]
public class PlayerDataList
{
public List<PlayerData> players;
public PlayerDataList()
{
players = new List<PlayerData>();
}
}
public class PlayerPrefsJsonListExample : MonoBehaviour
{
private const string PlayerDataListKey = "PlayerDataList";
void Start()
{
// サンプルデータ作成
PlayerDataList playerList = new PlayerDataList();
playerList.players.Add(new PlayerData("Player1", 100, 5));
playerList.players.Add(new PlayerData("Player2", 200, 10));
// 保存
SavePlayerDataList(playerList);
// 読み込み
PlayerDataList loadedPlayerList = LoadPlayerDataList();
foreach (var player in loadedPlayerList.players)
{
Debug.Log($"Player Name: {player.playerName}, Score: {player.score}, Level: {player.level}");
}
}
void SavePlayerDataList(PlayerDataList dataList)
{
string json = JsonUtility.ToJson(dataList);
PlayerPrefs.SetString(PlayerDataListKey, json);
PlayerPrefs.Save();
Debug.Log($"データが保存されました: {json}");
}
PlayerDataList LoadPlayerDataList()
{
string json = PlayerPrefs.GetString(PlayerDataListKey, "{}");
return JsonUtility.FromJson<PlayerDataList>(json);
}
}
- リスト内の複数キャラクター、武器などをまとめてJSON文字列にし、PlayerPrefsに保存する流れです。
- たとえばRPGで複数パーティーメンバーのステータスを管理するなど、柔軟に応用できます。
6. まとめ
- JSON形式を使うと、複雑なデータ構造(キャラクター情報や装備リストなど)もPlayerPrefsに一括で保存可能。
- UnityのJsonUtilityを活用すれば、自作クラスをラクにシリアライズし、細かい数値や文字列をひとまとまりに扱える。
- リストや配列にも応用できるので、複数キャラやアイテムのセーブ処理にも便利。
PlayerPrefs×JSONの組み合わせを使うと、武器やステータスなど色々なデータをまとめて管理でき、ゲーム開発の生産性がグッと高まります。ぜひ、あなたのプロジェクトにも取り入れてみてください!
この記事を読んでもっと実践したいと感じたあなたへ
Unity開発を効率よく進めるためには、実践的なスキルと仲間との交流が欠かせません。
そんな方におすすめのステップが、下記の3つです。
1. 有料教材「どこでもUnity教室」でゲーム制作を短期マスター
- 5日でシンプルなFPS完成:初心者向けに要点を押さえたカリキュラム
- C#や最新のInputSystem、FPS実装まで網羅:つまずきやすいポイントを先回りで解説
- 購入特典:Discord招待+サンプルプロジェクトDLで、疑問や実装例を即確認
Unity初心者でも最短5日で3D FPSが完成!今すぐ始める入門チュートリアルはこちら
2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP
- 初心者~中級者までOK:学習進度に合わせて質問や情報共有
- 質問サポートが充実:わからないことを仲間や講師に即相談
- 学習仲間と切磋琢磨:一緒に学ぶから続けやすい
Discordサーバー参加はこちら
3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート
- コナラ総販売200件超:さまざまなUnity開発の依頼を対応
- VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
- ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数
ご相談・お問い合わせはこちら
Discussion