一般ノート

ゲームで利用するマスターデータ

組み込み型マスターデータの管理方式を、独自バイナリ・JSON・FlatBuffers・MasterMemory・SQLite の観点から整理した記事です。

Game DataMaster DataUnity

ゲームのバランス設定などに使う組み込み型マスターデータを、どの形式で管理するか。ここでは tamilabo が Animal Panic Puzzle などで検討・採用した方式を整理します。

ここでいうマスターデータは、ソーシャルゲームのようにサーバーから定期更新する運用型ではなく、アプリに同梱し、アップデートのタイミングで更新する組み込み型を想定しています。CDN やアセットバンドル経由での更新は運用次第で応用できますが、本稿では割愛します。

組み込み型マスターデータのイメージ

独自バイナリ形式

データ構造体を定義し、Excel や CSV から変換ツールでバイナリを生成する方式です。C/C++ では struct をそのままファイル读写する形が典型で、暗号化や難読化も書き込み前に挟みやすいです。

  • メリット: 形式を完全にコントロールできる。チューニングしやすい。
  • デメリット: 汎用フォーマットではない。変換ツールの整備が必要。
  • 主な用途: マスターデータ、セーブデータ

JSON 形式

実装は容易で、Unity なら JsonUtility でシリアライズできます。Web API とも相性がよい一方、テキスト解析のコストとメモリ使用量が大きくなりがちです。コンソール移植などメモリが厳しい環境では注意が必要です。改竄されやすいため、マスターデータ用途では暗号化を推奨します。

  • メリット: テキストなので管理・確認がしやすい。サーバー・クライアント双方で扱いやすい。
  • デメリット: 解析が遅い。メモリ使用量が高め。ファイルサイズが大きくなりがち。
  • 主な用途: マスターデータ(暗号化推奨)、設定ファイル、改竄されても問題ないデータ

FlatBuffers 形式

Google がゲーム向けに公開したクロスプラットフォームのシリアライズライブラリです。メモリ効率とシリアライズ・デシリアライズの速度に優れ、Animal Panic Puzzle でも FlatBuffers ベースの管理パイプラインを採用しました。

スキーマ定義が必要で、データ生成まわりの手間は JSON より大きいです。Animal Panic Puzzle では flatc で JSON からバイナリへ変換し、バイナリ化後に暗号化する流れにしています。

  • メリット: ゲーム向けに設計されており性能がよい。ネットワーク通信フォーマットとしても使える。
  • デメリット: スキーマ定義が必要。生成パイプラインの構築が手間。主流ではない。
  • 主な用途: マスターデータ、通信ペイロード

MasterMemory 形式

UniRx 作者の河合拓也氏が公開したオープンソースのマスターデータ管理ライブラリです。内部フォーマットに MsgPack を使い、ロード性能とメモリ効率のバランスがよいとされています。執筆当時は検討対象として挙げていました。

番外編: SQLite

ファイルベース DB をマスターデータやセーブデータに使う方法です。SQL に慣れている場合は記述しやすい一方、Unity 向けの定番構成は少なく、パフォーマンス面の評判も用途次第です。本稿執筆時点では Animal Panic Puzzle では採用していません。