こんにちは!
株式会社OGIX サーバーエンジニア、時々クライアントエンジニアのH.O.です。
みなさん、ゲームはお好きですかね?
私は子供のころ、こんなキャラクターがいて、こんなアイテムがあって
パラメーターはこんな感じで…
といった具合に妄想をデータとして紙だったりエクセルに書いてるのが好きでした。
そんなデータですが、実際の現場ではどんな感じに使われているか気になりません?
今回はゲームの設定に関するデータをどんな感じで管理しているか
どんな形式で持っているかをちょこっと紹介できればと思っています。
![]()
まずはじめに
ゲームで扱うデータはいろいろありますが
ゲームの設定に関するデータのことをマスターデータやマスタと呼んでいます。
例えば
キャラクターのステータス
最大HP
攻撃力
防御力 etc...
アイテムの設定
アイテム名
種別
効果量 etc...
フレーバーテキスト etc...
といったものがマスターデータとして扱われます。
これらのデータは、コードとは分離して管理されます。
マスタの作成方法
マスタですが基本はプランナーさん、厳密にはレベルデザイナーさんが作成するものになります。
そのためエンジニアの知識がなくても入力が可能な方法として
Excelやスプレッドシートを利用して作成することが多いです。
作成の流れとしては、まず仕様に沿って雛形を作成し
それに沿ってデータを入力していく形になります。
一例として
![]()
こんなイメージがあった場合、まずゲームの設定となりうるものを洗い出していきます。
今回の場合は
名前
最大HP
攻撃力
防御力
を設定できるものとします。
(あとキャラクター画像もマスタの範囲内ですが今回はスルーで…!)
その場合は
![]()
こんな感じにエクセルで記載しています。
マスタのデータフォーマット
作ったExcelデータはバイナリデータのため、ゲーム上ではそのまま扱うことはなく
一度プログラムで読みやすい形にするため、テキストファイルに変換してあげる必要があります。
主に用いられるデータ形式を、先ほどのExcelデータを変換したイメージとともに3種類ほど紹介します。
CSV/TSV
![]()
カンマ( , )もしくはタブ文字(\t)でデータ区切りをする形式です。
CSVはエクセルの保存形式として、スプレッドシートからテキストエディタに張り付けた場合
TSVとして貼り付けが行われるので、非エンジニアでもエンジニアの助けなしに
簡単に出力できる形式です。
項目の増減の時にずれることで、データが崩壊するという点に注意が必要なことと
量が増えると見づらくなる傾向があるので、長期運用を想定した場合はお勧めしません。
JSON
![]()
項目と値がセットになっているのが特徴です。
やろうと思えば連想配列などを利用して入れ子型にすることもできます。
(がExcelで表現することが難しいのでやることはないかと)
一つ一つの要素が厳密に書かれているため、項目の増減に対して耐性があります。
UnityではJSONUtilityが用意されているため、Unityとの相性がよく利便性が高いです。
見やすさにおいては人力できれいに整えてあげる必要があります。
YAML
![]()
こちらも項目と値がセットになっているのが特徴です。
書式から人が見やすくなるように保証されています。
インデントによって階層の表現がされて少し不思議な感じがありますが
個人的には扱いやすいものだと思っています。
![]()
作ったマスタを扱う
さて、形式に変換したものを実際に使うときは
ファイル読み込みを行い、管理用のクラスに記録させます。
一例としてJSON形式のものをUnityで利用を想定した場合
まず各要素の部分の記録するクラスを用意し
![]()
マスタのリストを保管するクラスを用意
![]()
そのうえでデータを読み込む形にするとよいです。
![]()
実際に扱うときはこのように一度値のコピーを行いゲームを使っていく形になります。
![]()
![]()
まとめ
・ゲームにはマスターデータというルールや設定を司るデータがあるよ
・マスターデータはExcelやスプレッドシートで作成/管理されるよ
・プログラムではCSV/TSV,JSON,YAMLなどに変換して読み込むよ
一緒に働く仲間を募集しています!
株式会社OGIXでは一緒に働いてくれる仲間を募集しています!
エンタメ制作集団としてゲームのみならず、未来を見据えたエンタメコンテンツの開発を行っています。
皆様のご応募、心よりお待ちしております!