ゲーム中のデータを手軽にセーブ・ロードする方法を知りたいの。
JSON形式にシリアライズすればセーブができるわ。ロード時は逆の操作をやってあげれば良いの。
スクリプト中で扱うデータをJSON形式で読み書きする方法の解説記事です。
ゲーム中のデータとJSON形式との相互変換は、Unityが提供するJsonUtilityクラスを使えば簡単に実現できます。
参考:JsonUtility – Unity スクリプトリファレンス
ファイルとしての読み書きは複数手段がありますが、ファイルシステムが使える環境なら.NETのFileクラスを用いるのが簡単です。
本記事ではUnityのJsonUtilityクラスと.NETのFileクラスを用いて、スクリプトで扱うオブジェクトをJSON形式のデータとして読み書きする方法を解説していきます。
JsonUtilityクラス
Unity5.3より追加されたUnity標準のJSONデータを扱うクラスです。
オブジェクトをJSON形式のテキストにシリアライズするToJsonメソッド、逆にJSON形式のテキストからオブジェクトにデシリアライズするFromJsonメソッドがあります。
次のようなコードでオブジェクトとJSONテキストとの相互変換ができます。
オブジェクトからJSONへの変換
JSONからオブジェクトへの変換
JSON形式のデータはstring型の文字列となります。
JsonUtilityクラスのより詳細な使い方については、以下記事をご覧ください。
Fileクラス
.NETが提供するFileクラスでは、文字列データを読み書きするメソッドが提供されています。
文字列データのファイル保存にはFile.WriteAllTextメソッド、ファイル読み込みにはFile.ReadAllTextメソッドを使います。
実際の使用例は以下のようになります。
ファイルへの保存
ファイルからの読み込み
Json形式でセーブデータの読み書きをする
以上を踏まえて、実際にJSONデータとしてファイルに対して読み書きを行ってみたいと思います。
サンプルスクリプト
以下、ゲームオブジェクトのワールド位置を読み書きするサンプルスクリプトです。
このスクリプトをJsonSerializationTest.csという名前で保存し、対象のゲームオブジェクトにアタッチすると機能するようになります。
実行結果
方向キーでオブジェクトを移動させ、「1」キーで現在位置をJSONファイルに保存、「2」キーでJSONファイルから現在位置を読み込んでTransformにセットする挙動になります。
なお、JSON形式で保存するファイルは、Application.persistentDataPathが指し示すディレクトリ配下にposition.jsonとして置くようになっています。
パスは各プラットフォームによって異なります。各プラットフォーム毎のパスは以下リファレンスをご覧ください。
参考:Application-persistentDataPath – Unity スクリプトリファレンス
position.jsonを開くと、以下のようにデータが格納されていることと思います。
さいごに
今回は、JsonUtilityクラスとFileクラスによるデータ読み書きの方法をご紹介させていただきました。
Unity標準以外の機能を視野に入れると、ほかにも様々な方法で同様の目的が実現できます。
JSONというテキスト形式として扱うことで、デバッグが容易になる、サーバーとのデータのやり取りがしやすくなるといったメリットも存在します。
ぜひ活用を検討してみてください。