ゲームのプログラミングを行うとき、コードを使うにしても Drag and Drop を使うにしても、人間はいとも簡単に間違える生き物です。間違った変数を使用してしまったり、間違った引数を渡してしまったり、間違った関数を使用してしまったり... 誰にだって起こり得るありふれたエラーです。こうした間違いは、スクリプト/アクション エディターのシンタックス チェッカーが必ずしも検出してくれるとは限りません。実際にゲームをコンパイルしたり実行してみることで、初めて明らかになるエラーも少なくはないということです。しかしそれでも、何が原因なのかを正確に知ることがむずかしい場合は往々にしてあります。選択したデバイス上でゲームがどのように動作しているかを把握し、現在はどんなインスタンスがルームに存在しているか、どんなグローバル変数が作成されているかなどといったホスト全体の情報を確認しておくことはとても重要なのです。
そこで、いわゆる "デバッグ コード" をゲームに追加して、たとえば必要な情報を画面へ表示させたり、エラー発生時にメッセージを表示させたり... その多くは自力で解決することもできます。しかし、これらはかなりの労力を伴うケースが多く、そのうえ、そもそもどの部分に問題があるのかがわからない場合は、バグの追跡に多大な試行錯誤と時間を費やさなければならないかもしれません。そのために、GameMaker Studio 2 には デバッグ モード と呼ばれる特別なテスト モードが用意されています。このデバッグ モードでは、テストと同時に デバッグ モジュール が起動します。また、ゲームの実行時に問題が発生したときに、原因の追跡に役立つメッセージを表示させられる包括的なエラー報告システムも用意されています。
次のセクションでは、ゲームをデバッグするさまざまな方法を説明します:
プロジェクトのコンパイル中や実行中にエラーが発生すると、次のように コンパイル エラー の 出力ウィンドウ へメッセージが出力されます:
ほとんどのコンパイラー エラー メッセージは、同じフォーマットに従って出力されます。はじめに、エラーが発生したオブジェクトの説明、続いて、該当するイベントおよび行番号、エラーそのものの簡単な説明が表示されます。ゲームのクラッシュを引きおこす直接的な原因となるおそれがあるため、言語やシンタックスに関するバグの情報をエラー報告によって収集することは非常に重要です。ただし、緻密で捉えがたい微妙なバグであったり、パフォーマンスに関するフィードバックなどを得ることはできません。そういったケースでは デバッグ モード (次に説明します) を使用しましょう。
これらのコンパイル エラーのほかに、シンタックス エラー が発生することもあります。シンタックス エラーは、DnD™ アクションおよびコードを追加しているときに検出され、次のようにシンタックス エラー 出力ウィンドウ へ出力されます:
シンタックス エラー ウィンドウでは、コンパイラー エラーと同様、オブジェクト、問題の原因となっているイベントおよび行、エラーに関する簡単な説明が表示されることがほとんどです。
より慎重に不具合を探したい場合は、デバッグ実行 をクリックして デバッグ モード でゲームを実行します。すると、ゲームと同時に デバッグ モジュール が起動します。このモジュールでは、全体のパフォーマンスから個々のインスタンス内の変数の値まで、ゲーム内のあらゆる部分がどのようにして動作しているかを関しすることができます。デバッグ モジュールの機能とその使い方については、次のページで詳しく説明します:
なお、デバッグ モジュールを使用して、コードおよび DnD™ へ ブレークポイント を追加することもできます。ブレークポイントとは、ゲーム コード中に一行単位で設定できる、ゲーム ループ上の一点です。これによって、デバッグ モジュールを一時停止させながらステップ実行することができるようになります。ブレークポイントを追加するには、任意の行で "F9" キーを押します。設定されているブレークポイントは 出力ウィンドウ へ表示され、必要に応じてオン/オフを切り替えることができます。
デバッグをするためにゲームを実行しているとき、デバッグ モジュール の プロファイル オプションを使用することで、ゲームのパフォーマンスや、全体がどのように連携しているかの概要を確認することができます。たとえば、ゲームがどのように実行されているか、任意の関数の呼び出しやイベントの実行にどれくらいの時間がかかっているかなどについて、非常に詳細な情報を知ることができます (この詳細については デバッグ モジュール のセクションを参照してください)。ただし、デバッグ モジュールが実行されていなければパフォーマンスを確認することはできないため、たとえばなんらかのデバイス上で実行ファイルをテストしたい場合などには適さないかもしれません...
こうしたケースであったり、視覚的に情報を表示させたい場合は、ゲーム内に デバッグ バー を表示させることができます。デバッグ バーには、CPU や GPU、メモリの使用量が表示されます。
デバッグ バーは、実際のゲーム ウィンドウの CPU/GPU 使用率をグラフィカルに表示します。show_debug_overlay() 関数を使用して、ゲーム内からオン/オフを切り替えることも可能です。このバーはいくつかのセクションに区切られており、各セクション間は1/60秒を指しています。上の画像からもわかるように、バーはさまざまな色から構成されており、ゲームにおけるさまざまな面のパフォーマンスを表しています。バーが長ければ長いほど、その処理にはより多くの時間が必要で、結果としてパフォーマンスが低下していることを示しています:
- 緑色 - 入出力処理 (例: キーボード、マウス、ゲームパッド、インターネット接続 など...)
- 赤色 - ステップ イベントの更新速度
- 黄色 - 描画イベントにかかる時間
- 橙色 - デバッグの更新速度 (デバッグ モジュール使用時にのみ表示されます)
- 白色 - GPU 残り時間 (GPU がフレームのレンダリングを完了してから、次のフレームに取りかかることができるまでの待機時間)
- 水色 - テキストのレンダリング時間
- 灰色 - 各描画ステップでの画面のクリアにかかる時間
- 暗い赤色 - GPU フラッシュ (GPU がメモリから画像をクリアするのにかかる時間)
色つきのバーとは別に、上部にはいくつかの値が表示されています。これらの値は、次のような意味を持ちます:
- FPS - これは、あなたのゲームの "1秒あたりのフレーム数" の値で、あなたのゲームがどれだけ速く動いているかをおおまかに表しています。この値は、ゲームのゲーム速度に 制限されておらず、プレイ時にどれくらいの "オーバーヘッド" が生じているのかを示します。この値がゲーム速度よりも大きければ大きいほど、ゲームはよりスムーズに実行され、追加のオーバーヘッドも大きくなります。この値は、セッション中に大きく変動することがありますが、ゲームを終了すると、GameMaker Studio 2 の出力ウィンドウへ FPS の最大値と最小値および平均値が表示されます (最小値がマイナスになる ことがあります が、これはバグではなく、起動時および初期化時の処理によるものです)。
- テクスチャー スワップ - この値は、1ゲーム フレームのあいだにテクスチャーを入れ替える回数を示しています (GameMaker Studio 2 がすべてのイベントを実行するのにかかる時間をゲーム ティックと呼びます。1秒あたりのゲーム ティック数は、ルーム速度として指定します)。テクスチャー (スプライトと背景) は、テクスチャー ページとして保存されています。ゲーム内のイメージ アセットが多い場合、 GameMaker Studio 2 はそれらをすべて描画するためにテクスチャー ページを頻繁に入れ替える必要があります。もしこの値が大きいとき (たとえば 20 以上) は、特にモバイル プラットフォームでのゲーム パフォーマンスへ影響を与える可能性があるため、最適化の方法を模索する必要があります。
- 頂点バッチ - これは、1ゲーム フレームのあいだに、ゲームが GPU へテクスチャーを送信する回数を示しています。テクスチャー スワップと同様に、この値はなるべく小さくなることが望ましいです。テクスチャー バッチとは、レンダリングのために GPU へ一度に送信されるデータ群のことを指します。フォントや色、ブレンド モードなどを変更するといったような、広範囲の描画方法へ影響を与えかねない変更を加えると、バッチが "壊れて" しまいます。バッチの送信数が多くなるとゲーム パフォーマンスへ影響を与える可能性があるため、これらの変更はなるべく一部のオブジェクトのみに留めるよう意識してください。
注: テクスチャー スワップと頂点バッチの値は0になることはなく、通常は2または3程度の値を示します。仮にルームが空でオブジェクトがなにもない状態でも、依然として GameMaker Studio 2 が描画およびバッチ処理を続けているためです。これらのツールを使用することで、ゲーム パフォーマンスがどの程度であるかを確認できるほか、パフォーマンスを向上させるためにはどの部分を "微調整" しなければならないのかを知ることができます。パフォーマンス上の問題およびゲームの最適化についての詳細は、YoYo Games ヘルプ センター - ゲームを最適化するには を参照してください。
コンパイル済みの最終的なゲーム パッケージをウィンドウ上で実行するとき、デバッグをするために使用できる コマンド ライン パラメーター が提供されています。どのように動作するのかについては、こちら を参照してください。