UnityのDebugクラスを使ってゲーム開発に役立てる

今回はUnityのDebugクラスを使用してゲーム開発をする時に役立つようにしていきます。

Debugクラスと言えば当たり前のように

のようにコンソールに引数で渡した文字列を表示していたと思います。

Debugクラスには他にもメソッドが用意されているのでそれらのメソッドも使ってみましょう。

スポンサーリンク

Debugクラスのメソッドを使う

Debugクラスにはいくつかのメソッドがあり、引数の数が違う同じメソッドが用意されていて全ての引数を指定しなくても実行出来るものもあります。

今回はいくつかのメソッドを取り上げてみます。

Logメソッド

Logメソッドはすでに何度となく使っているので説明はいらないと思いますが、Unityのコンソールに文字列を出力する事が出来ます。

のような感じで使います。

第1引数は出力する文字列で、第2引数は使っていませんでしたがこちらはこのメッセージがどのコンテンツで発生したかを設定します。

その為第2引数ではthis.gameObject等を使いこのスクリプトが設定されているゲームオブジェクト等を指定します。

するとコンソールで出力された文字列を選択した時にヒエラルキーの指定したゲームオブジェクトがわかりやすく表示されます。

LogErrorメソッド

LogErrorメソッドはコンソールにエラー表示をするメソッドです。

スクリプトを保存しコンパイルした時にエラーがあった場合に表示されるのと同じですね。

LogErrorを使えば自身でエラー表示を行う事が出来ます。

引数はさきほど紹介したLogと同じで、コンソールの表示がエラー表示になるだけです。

LogFormatメソッド

LogFormatメソッドはフォーマットされた文字列をコンソールに表示する事が出来ます。

Logメソッドでは単純な文字列を表示するだけですが、LogFormatを使うと表示するデータをフォーマットして表示する事が出来ます。

Assertメソッド

Assertメソッドを使うと設定した条件が成立しなければエラー表示を行います。

AssertFormatメソッド

AssertFormatメソッドはAssertメソッドにフォーマットした文字列を使えるということでLogFormatと同じですね。

LogWarningメソッド

LogWariningはコンソールに警告を表示する事が出来ます。

実行に問題はないけどなんらかの警告をしておかなければいけない時に使います。

スクリプトを記述しコンパイルした時にコンソールによく黄色いアイコンと一緒に表示されてるあれですね。

LogWarningFormatメソッド

LogWarningFormatメソッドは警告表示する時にフォーマット文字列を使用する事が出来ます。

LogExceptionメソッド

例外が発生した時にコンソールにエラーを表示させます。

Breakメソッド

Breakメソッドはエラー等が発生した時にエディターの実行を止めます。

この処理は呼び出せばUnityのエディターの実行を一時停止する事が出来ます。

DrawLineメソッド

UnityのSceneウインドウにレイを表示し視覚的にわかるようにします。

GameウインドウでもGizmoを有効にすると見る事が出来ます。

DrawLineはレイの開始位置と終了位置を指定しレイを飛ばします。

引数はレイの色まで指定していれば大丈夫です。

DrawRay

DrawLineは開始位置と終了位置を指定しレイを表示しますが、

DrawRayは開始位置とレイの方向ベクトルを指定しレイを表示します。

第2引数がDrawLineと違うだけで同じように使う事が出来ます。

引数はレイの色まで指定していれば大丈夫です。

Debugクラスのサンプルを作成する

Debugクラスのメソッドのサンプルを作成し実行してみましょう。

DebugTestクラスを作成し以下のような処理を追加します。

コンソールに表示する時に使用するテストデータをフィールドで作成しています。

ではフォーマットした文字列を作成していて、{}の中の数字と第2引数以降の引数とが対応しています。

それぞれに対応する引数との間には|を仕切り文字として表示し引数毎の表示をわかりやすくしています。

{0}がtestValue1、{1}がtestValue2、{2}がtestValue3に対応しています。

{1,-15:0,0.00000}

では第3引数のtestValue2の値を表示していて、,の後の-で左寄せ、15で表示桁を指定しています。

:の後は書式設定で0で対応する数字を0で表示し,で3桁毎に,が表示されるようになり、0.00000で小数点以下の桁で足りなければ0を表示します。

String.Formatの詳しい書式設定に関しては参考サイトのC#リファレンスを参照してください。

でレイを視覚的に表示していますが、Debug.DrawLineではメインカメラから前方にレイを飛ばしますが、第2引数は終了地点なのでメインカメラの位置+前方 * 50fになっています。

Startメソッドで実行しているのでレイを表示する時間をMathf.Infinityに設定しずっと表示するようにしています。

Updateメソッドで実行する場合はここを1fとしていてもUpdateメソッド毎にレイを表示する処理をするのでずっとレイが表示されます。

第5引数はtrueとしレイが何かで遮られた時にも手前に見えるようにしています。

Debug.DrawRayの方はメインカメラの1m上からレイを前方に50m飛ばしています。

第5引数はfalseとしレイが何かで遮られた時は手前に表示しないようにしています。

Debug.LogExceptionは例外が発生した時に実行するようにしていますが、いい例外の発生方法が思いつかなかった為、自前の例外クラスを作成し、

それを投げる事にしました。

マウスの左ボタンを押した時に自前の例外クラスを実行しています。

例外クラスは

Exceptionクラスを継承して作成しコンストラクタが呼ばれた時にExceptionクラスのコンストラクタを呼び出し設定しているだけです。

マウスの右ボタンを押した時はDebug.Breakメソッドでエディターの実行を一時停止するようにしています。

Debugサンプルの確認

サンプルが出来たので確認してみましょう。

エラーが発生するとエディターが停止してしまって次が実行出来ないので

エラーになっても実行を停止しない

↑のようにコンソールのError Pauseを無効化しておきます。

Unityの実行ボタンを押すとコンソールには

コンソールに警告とエラーが表示された

↑のように表示されました。

実行をした後にマウスの左ボタンを押して例外を発生させ、マウスの右ボタンを押してエディターを一時停止してみてください。

それぞれの実行が正しく表示されていると思います。

フォーマットを利用した表示ではそれぞれ整形した文字列が表示されていますね。

GameウインドウのGizmosのボタンを押しGizmosが表示されるようにしレイが見えるようにします。

DrawLineの第5引数でレイの見え方が変わる

↑のようにDebug.DrawLineでは第5引数をtrueにしている為、レイが隠された時は手前に表示しません。

Debug.DrawRayの方はfalseにしている為、手前に表示されています。

終わりに

今回はDebugクラスについて見てきました。

今まではDebug.LogやDebug.DrawLineしか使ってこなかったんですが、必要に応じて他のメソッドも活用していけたらと思います。

んーでもDebug.DrawRayぐらいしか使わないかも・・・・(^_^;)

参考サイト

Unityスクリプトリファレンス-Debug-

C# リファレンス – MSDN – Microsoft-String.Format メソッド-

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます