NEWS / BLOG
2023.04.11
社内勉強会の紹介:開発サイクル(2)
#テックネタ #プログラマー

はじめに
こんにちは。プログラマーのTです。
株式会社ジーンでは、社内でいろいろな勉強会が行われています。

 

勉強会の概要
前回、開発サイクルの1回目として、プログラマーの開発サイクルに関して解説しました。今回は、チームの開発サイクルについて考えてみましょう。

 

チームのサイクルを改善する
ゲーム開発では、おおむね、プログラムとモデルやUIなどのアセットを最初に作り、その後は、ゲームの品質を上げるために、なんどもプレイを行い、パラメータや動作を修正していくという作業の繰り返しになります。
image0411_01.png
このサイクルをスムーズに行うにはプログラマーの助けが不可欠です。これを実現するのが様々なデバッグ機能です。

 

デバッグ機能を開発する
開発を進行するとき、プログラマーはゲームに必要な部品を、個別にすぐテストできるようにすると良いという話を前回しました。
主にゲームの内容にかかわるプランナーは、実際のゲームの流れを見ながら確認します。つまり、ゲーム本編を何度もプレイすることになります。
本当に小規模なゲームでない限り、毎回最初からプレイするのでは手間が大きすぎます。

そこで、いろいろなデバッグ機能をゲーム内に追加していくことになります。
ここでは、主要なデバッグ機能の種類と実装方法、メリットや注意すべき点について説明していきます。

デバッグ機能を開発する前に、デバッグ用のフラグや設定を保存する機能を作成しておくと良いです。
また、デバッグ機能が製品に含まれないよう、デバッグ機能を実装する際のルールや、手続きを決めておくと、マスターが近づいてから慌てずに済みます。開発の序盤に済ませておきましょう。

 

ログ機能
もっとも代表的なデバッグ機能はログです。
ログはゲームエンジンを利用するのであれば、標準的な機能として搭載されています。
扱いが簡単ではあるのですが、不用意に使用するとログだらけになってしまうため、注意が必要です。重要度の段階をつける、カテゴリーごとに分ける、一時的なテスト用のログはコミット前に削除するなど、一定のルールが必要です。

プランナーやデザイナーに、指定漏れやデータ抜けなどの注意を促すためにログを使用することがあります。例えば、モデルで指定されたテクスチャが存在しない場合、「テクスチャエラー」や「テクスチャが見つかりません」のようなログにしてしまうと、スルーされてしまいがちです。

問題が起きた対象や、具体的に何が問題になるかが書いてあれば、より意図が伝わりやすくなります。例えば、「ground.fbxで指定しているgrass_tex.pngがみつかりませんでした。このモデルは正しく表示されません」という感じです。さらに、「grass_tex.pngをプロジェクトに追加してください」のような指示があればよりよいかもしれません。長々と書きすぎるとログが見づらくなる場合もありますので、表示領域や方法に合わせて、ログを調整してみてください。

image0411_02.png

 
スキップ機能
最も実装が簡単で、最も効果のあるデバッグ機能がスキップです。特に、プレイ時間が長いゲームでは重要な機能になります。
タイトル画面など、ゲームと関係ない画面を表示しないようにする、イベントやメッセージをスキップする、RPGであれば戦闘をスキップする機能がこれにあたります。

完全にスキップしてしまうことで、フラグが成立しないなどの対応を行う必要がある場合もありますが、ほとんどがフラグ1個と簡単なifのみで実装できるため、効果がかなり大きい機能となります。まずはここから実装しておきましょう。

 

パラメータ機能
パラメータ機能は、アイテムの取得や、レベルアップなど、各種パラメータを変更するデバッグ機能になります。ある程度のGUIが必要になり、多少手間がかかりますが、あると便利に進行することができます。
ゲームの進行度に合わせたアイテムや武器、レベル設定などのプリセットを用意しておくと便利です。

 

表示関係の機能
こちらは、実際のゲームでは非表示なものを表示する機能になります。
コリジョンなどの判定の表示、プレイヤーや敵の内部状態や隠しパラメータの表示、FPSをはじめとした負荷表示がこれにあたります。
その他、スローモーションやゲーム中に自由にカメラが操作できる機能などがあります。
コリジョン表示・FPS・自由カメラなど汎用的な機能については、代表的なゲームエンジンであれば、搭載されていることがほとんどです。

image0411_03.png

これらの表示機能は便利なのですが、デザイナーにとっては、作成したアセットの確認の妨げとなります。また、スクリーンショットをとる際にも邪魔になります。一括して非表示にできる機能を作成しておくと、各チームともにスムーズに開発が行えるでしょう。

 

エイジング、自動プレイ
ゲーム開発におけるエイジングとは、長期的な実行を行ったときにゲームに不具合が出ないか確認することをさします。
メモリリークをはじめとしたプログラムのバグ、アセット管理の不具合、タイマー関係のバグ等があると、長く実行したときにだけエラーが発生するといったことがあります。これらを見つけるため、ゲームを起動したままのテスト、簡単な自動プレイを実装し、繰り返しプレイを行う、といったことを行います。

 

慣れた不便を見つける
開発が長期化すると、少しずつ過去の不要なデータであったり、もう使用していない機能だったりがあちこちに残ってしまうという状態になりがちです。
プログラマーはときどきそういうものを見つけて、整理するようにしましょう。開発メンバーが入れ替わったり、新しく増えたりしたときに、なんども同じ説明をしているようであれば、改善を行う良いタイミングとなるでしょう。

 

デバッグ機能を通じて、全体の作業フローを改善する
他セクションのゲーム制作における作業を軽減するのはプログラマーの重要な仕事です。

例えば、プレイヤーのパラメータを1つ変更するのに、大掛かりな作業がいくつも必要となると、よりよいゲームを作るのは難しいです。
細かい調整が必要な項目については、できるだけリアルタイムに変更しながら確認できるようにしましょう。ゲームエンジンでは、必要なパラメータを公開し、実行中に編集をしたり、シーンごとにシリアライズしたりできる機能があります。これらを積極的に使っていくことも検討しましょう。大量に作成するものについては、専用のエディタを作成する場合もあります。

全体を通じて、1度2度程度しか行わない作業は、面倒が多くても問題にはなりません。プログラマーのリソースをどのように配分するかは十分に考える必要があります。
どこまでの機能を作成するか決めたら、デバッグ機能の作成をスケジュールに組み込みましょう。

プランナーなど、他のセクションが実作業を行う部分でのフォローが十分にあれば、パラメータ調整をはじめとした繰り返し行う作業の回数を増やすことができ、最終的に作品のクオリティをあげることができます。

 

おわりに
今回は、開発サイクルにおいて重要なデバッグ機能についてお話ししました。ゲームをよりよく作るうえで必要な機能です。少しでも参考になればと思います。

ありがとうございました。