#【はじめに】
OpenSiv3Dゲームやアプリを開発しているとき、外部ファイルでパラメータが定義されたファイルを用意して、プログラム中から読み込ませて使用するといったことはよくあると思いますが、
その外部ファイルがCSVファイルやテキストファイル管理のままだったりすると、実際にゲームやアプリを公開した時に中身がユーザから丸見えになってしまいます。(※OpenSSL等で暗号化することで丸見えは回避できますが、記事の趣旨から外れるので割愛します)
また、開発中でもCSVのカラム数が増減した時に一々ソースコードの中身をCSVと比較しながら読み込み順に気をつけて書いたり、CSVファイルの中に記述された文字列をプログラム内で使用している型へキャストしたりするのは面倒ではありませんか?
今回は、そんな問題を解消する、CSVの記述を元にシリアライズしたバイナリファイルとそのバイナリファイルに対応したソースコードを出力するツール(以下、MasterDataMakerForOpenSiv3D)を作ったので、紹介したいと思います。
#【想定している対象者】
- OpenSiv3Dでゲームやアプリを作っている方
- 現在外部データをCSVやテキストで管理をしていて(しようとしていて)、できれば公開するときにデータの丸見えは避けたい方
- 外部データ読み込み時のパフォーマンスを上げたい方
【OpenSiv3Dのバージョン】
Windows Desktop 0.3.1
※今後もサポートできる間はサポートしていきます。
#【ソースコードの在り処】
今回はコード量が多いので、ここでソースコードを公開しています。
ライセンスは現状、Mit Licenseとしています。
【ライブラリ】
また、このツールで出力したソースコードは、
[こちら]
(https://gist.githubusercontent.com/Militum/117fd182c939e0ac0020fdfc96fb4eb9/raw/4a381988125c67fafa782a0bd7a0a5b4842175d4/MasterData.hpp)のソースコードをダウンロードし、プロジェクトに追加してください。
【ツールの説明】
##【CSVの構造について】
今回のツールで対応しているCSVの構造です。
- 1行目 カラム名(変数名、C++予約語禁止)
- 2行目 カラムの型名(ツールで対応している型は後述)
- 3行目以降 データ行(型に沿ったデータ)
となっているものを用意してください。
具体例
Character.csv
id | name | hp | attack |
---|---|---|---|
uint32 | string | int32 | int32 |
1000 | Siv3Dくん | 100 | 20 |
1001 | Siv3Dくん2 | 200 | 10 |
##【ツールで変換に対応している型】
CSVの2行目に記述した型は下記のルールに則って変換されます。
下記に無い型を指定した場合は、ツールの実行に失敗します。
CSV側の定義 | シリアライズ時に変換される型 |
---|---|
int | int32 |
int32 | int32 |
int32_t | int32 |
int64 | int64 |
int64_t | int64 |
uint | uint32 |
uint32 | uint32 |
uint32_t | uint32 |
uint64 | uint64 |
uint64_t | uint64 |
float | float |
double | double |
String | String |
##【Configファイルについて】
MasterDataMakerForOpenSiv3Dでは、下記5つのパラメータを外部設定することができます。
- 入力に使用するCSVのディレクトリ
- シリアライズしたバイナリファイルの出力先となるディレクトリ
- シリアライズしたバイナリファイルと対になるソースコードの出力先となるディレクトリ
- 出力するソースコードの名前空間
- 実際にゲームやアプリで読み込む際に指定するバイナリファイルが置かれているディレクトリ
#【今後の展望】
- 無効行やコメント行のサポートする
- Configファイルで設定できる内容を増やす(型の組み合わせ拡張)
- ID重複等、CSVの設定ミスを検出する
- エラーメッセージを親切にする
他にもこういった機能が欲しいといった意見は、ツールを改善する上でとても参考になりますので、コメント等いただけますと幸いです。
#【まとめ】
OpenSiv3D のゲームやアプリ開発で使用するMasterDataMakerForOpenSiv3Dツールを作成しました。
このツールを使用することで、開発でCSVを使用している際の手間を削減することが見込めますので、是非使ってみてください。
#【参考】