ゲーム開発のツール作りで学んだ、ツールに最低限必要なこと

はじめに

こんにちは。プログラマの境田です。
この業界に入って10年以上経ち、様々なゲーム開発に携わってきました。

その中でゲーム開発を少しでも円滑にするため、ツールもいくつか作成しました。
今回は私が経験したこと、学んだツールづくりで必要なものや大事なものを記載しようと思います。
初歩中の初歩の内容になりますが、ツールづくりに興味がある方など、読んでいただくと幸いです。

制作環境

入社したての頃はWin32でツールを作成していましたが、ゲームの質の向上に合わせ、制作コストを軽減させつつ、質の高いツールを作れるようになるため、現在はWPFを活用しています。

C#言語を使用し、コントロールの追加、操作が容易に行え、低コストで様々な機能を作成することができ、重宝しています。

グラフィック表示などを行う場合は、UnityやUEを使用すると作成しやすそうですが、簡易的なツールでしたらこちらを使用することを個人的にお勧めしています。

ツールを作ると真っ先に言われる要望

いざツールを作成することになった時、当然のように来る要望がいくつかあります。
中には途中で実装するのが難しいものもありますので、設計段階から意識して作成する得をするかもしれません。

アンドゥ・リドゥ
編集中のデータを元に戻したり、それを解除したりする機能になります。
当然の機能ですが、制作途中から実装しようとするととても難しいため、制作前段階から実装の構想を練っておく必要があります。
 ・編集コマンドをキャッシュし、操作した内容に合わせたアンドゥ、リドゥ処理を作成する。
 ・編集前の状態をキャッシュし、アンドゥ、リドゥ時に状態を上書きする。
など、方法はいくつかあるので、初期段階から意識して作成を進めると良いです。

キーボードで可能な限り操作できるようにする
ゲーム開発は長時間パソコンを操作する都合、特にマウスを長時間使用していると、手首に負担がかかりやすく、腱鞘炎になりやすいと言われています。
なるべく手首に負担をかけないように、マウスを使わずキーボードで編集ができると嬉しいと要望を受けることがありました。
 ・tabキーで項目を移動
 ・ショートカットキーの作成
WPFではこれらの機能の実装も比較的簡単にできます。

見た目
せっかく自作するツールだし、ついつい画面をおしゃれに作りたくなりますが、ツールは長時間使用するため、見づらい、わかりづらい画面は好まれません。
見た目の華やかさよりも使いやすさを重視しましょう。
私もボタンをおしゃれに作ったら見づらいから普通の見た目にしてと言われたことがあります。

文字サイズ
ゲーム会社では若手からベテランまで様々な人が働いていて、中には小さな文字を見ることが負担になる方もいます。
自分は読めるから大丈夫と、文字サイズを小さくしてしまうと見づらいと言われて修正を要求されることがよくあります。
予め文字サイズを大きくして設計すると良いですが、文字サイズを指定できるような仕組みを用意すると褒められます。

ツールを運用して言われる要望

機能をすべて実装し、いよいよ運用を開始してしばらく経ちますと、作っている間は気づかなかった問題が発生するようになります。
途中から対応するには難しいものが多いため、事前に対策すると良い結果を生みやすいです。

検索、置換機能
ツールを運用し、大量のデータが作成されていきますと、同じようなデータの数を調べたり、一括で変更したいという要望が多くなります。
ツールによってどの部分を検索、置換したいかが変わってくるので、機能だけでなく、操作のための画面構成も考える必要が出てきます。

似たようなデータを作りやすくする、一括で編集するための機能
ゲームを制作していますと、データの80%くらいは同じだけど、一部変えたいものをたくさん作りたいというケースもまた多く発生します。
その度一からデータを作らせてしまうと、作業時間の浪費だけでなく、単純作業の繰り返しによるヒューマンエラーも多発してしまいます。
 ・コピー機能の充実化
 ・他データのインポート機能の作成
 ・データの継承機能の作成
などの解決策があります。
特に同じ機能を持ったデータを一気に変更できる継承機能があると、対応漏れなども防止でき、エラーが起きにくくなるため、お勧めです。

データの読み書き、ツールの起動速度
ツールはゲームのように60FPSで動いてほしいみたいな要望はあまりされませんが、データが増えていくにつれ、大量のデータの読み書き、展開して画面に表示するなどに遅延が発生します。
ツールづくりでも負荷のかかる処理はなるべく書かないよう意識するに越したことはありません。
処理の最適化以外にも、
 ・未編集のデータの書き込みは行わない
 ・画面に表示する情報量の制限(フォルダ分け機能のようなものを作り、データを細分化させる)
といった方法で対策を行うこともありました。

リアルタイム編集
作成したデータをゲームに反映させて動作を確認するとき、逐一ゲームを一旦中断して、再起動させてデータを読み直して…と行うと、作業効率が良くないため、要望がよく来ます。
ゲームを中断せずデータをリロードし、反映させる簡易的なものから、通信を駆使して編集した情報が即ゲームに送るしっかりした方法など、実装方法は様々です。

インゲーム中の要望

ツールによって作成されたデータは、実際ゲームに読み込まれ、別途作成した専用の処理によって動作します。
コードを書かずにデータだけでものごとが動く様は、見ていて達成感を味わえますが、データを解析し、動作するという仕組み上、よく問題になることがあります。

処理負荷
ツールに様々な機能を追加し、利便性を上げることが良いことですが、機能が多すぎるあまり、ゲーム中のデータ解析に時間がかかり、ゲームの負荷が重くなるということが良くあります。
利便性と処理負荷のバランスを意識しながら、機能制限なども考える必要があります。
近年はハードウェアの向上もあり、多少の負荷なら問題ないと判断され、利便性や開発効率を重視する考え方もするようになっていると感じています。

その他

ツールづくりは、プログラムコードを組む以外にも大事なことがあります。

・使用者とのコミュニケーション
実装者はツールの機能をすべて把握していますが、使用者には当然使い方を説明しないと使っていただけません。
機能の説明するためのドキュメントの作成やレクチャーなども求められるので準備する必要があります。

また、使用者は実装者以上にそのツールを触ることになりますので、長く使わないとわからなかった問題点や要望もよく相談されます。
開発中は、使用者とコミュケーションを取りながら、ツールを向上させていきます。

終わりに

簡単にですが、実際にツールを作った時にあった要望や大事なことをまとめました。
全てできれば理想ですが、私自身、実際は時間やコストの都合で、なかなかすべてを達成することはできない日々を送っています…。

また、ツールにも弱点もたくさんあるため、本当に必要かどうかもプロジェクトごとに考える必要はあります。
(直接ゲームを楽しくしているわけではない、要望もたくさん来てメンテナンスに時間が取られる、など)

それでも実際作って使用していただけると、自分の作ったツールでこれだけたくさんのものが作れたことや、複雑な処理を安全に作ることができたことの達成感を感じ、嬉しく感じます。

良いゲームを制作するための手段の一つとして、ツールづくりに興味を持っていただけると嬉しいです。

本記事を読んでいただき、ありがとうございます。