Unityに関連する記事です

 今回はデバッグのやりやすい環境作りについて説明します。
特に実機でのテストを見据えた内容になります。

 セーブやロードを扱うゲームの場合、それらのデータをゲーム内で削除できる機能があると何回も繰り返してデバッグを行えるようになります。
すでに PlayerPrefsHelper クラスにはデータを削除するメソッドを準備してありますので、ゲーム内にデバッグモード用のボタンを作成して用意します。
適宜なタイミングでボタンを操作すれば、セーブされているデータを削除できますので、デバッグしやすくなります。

 また Unity エディターでは Debug.Log メソッドの実行結果を Console ビューに表示できるので、処理の内容を把握しやすいですが、
実機でのテストはで Console ビューがないため、どのような処理結果になっているのかを確認できません。
そのため、Debug.Log メソッドの処理結果をゲーム画面に表示する機能を用意することによって、処理結果をゲーム画面に表示するようにします。

 これらは1つの例であり、ゲームに応じて、どんな機能があればデバッグがやりやすくなるのかを自分で考えて実装してみてください。

 これらの機能は切り替えスイッチを用意しておくことで、ゲーム画面に表示/非表示の切り替えを簡単にできるようにもしています。


<デバッグ機能 ―萢のログ表示>
動画ファイルへのリンク


<デバッグ機能◆.察璽屮如璽燭琉豎膾鐔>
動画ファイルへのリンク


<デバッグ機能 デバッグ機能の有効化/無効化の切り替え>
動画ファイルへのリンク


手順26 −デバッグ機能の実装−
46.デバッグ機能用のゲームオブジェクトを作成する
47.DebugManager スクリプトを作成し、デバッグ用の機能を実装する



 新しい学習内容は、以下の通りです。

 ・開発環境作りの考え方と実装



46.デバッグ機能用のゲームオブジェクトを作成する

1.設計


 自分にとって必要な機能を考えて、その機能をデバッグ機能として設計し、実装を行います。

 ゲーム画面に必要なゲームオブジェクトを作成し、それを制御するためのスクリプトを作成して、
ボタンや、テキストの表示などを行うようにしてください。

 ここで作成するゲームオブジェクトは先ほどの実装例に基づいたものであり、一例です。自分で作りやすいものを利用してください。


2.DebugSet ゲームオブジェクトを作成する


 Canvas ゲームオブジェクトの上で右クリックをしてメニューを表示し、Create Empty を選択します。
新しいゲームオブジェクトが1つ作成されますので、名前を DebugSet に変更します。
DebugSet ゲームオブジェクトは、デバッグ機能を持つ各ゲームオブジェクトを管理するためのフォルダ役のゲームオブジェクトです。


ヒエラルキー画像



インスペクター画像



 以上で完成です。


3.データ削除用のボタンの btnSaveDataReset ゲームオブジェクトを作成する


 【2】のヒエラルキー画像を参考しながら、ボタン用のゲームオブジェクトを作成し、ゲーム画面内に配置します。
配置する位置は任意です。特に設定などは変更していません。

 ゲームオブジェクトの名前は、ボタンの役割に即した名称にしておくといいでしょう。
また、子オブジェクトも同じように名前を変更しておきましょう。


インスペクター画像


 子オブジェクトは Text コンポーネントがアタッチされていますので、ボタンの役割を記述してゲーム画面に表示させます。


インスペクター画像




4.デバッグ用のログ表示を行う txtDialog ゲームオブジェクトを作成する


 ゲーム画面に Console ビューで表示している情報を同じように表示するための機能を実装するために
Text ゲームオブジェクトを作成して、そちらに情報を表示させるようにします。

 文字のサイズや、表示させる場所、表示範囲などを考えて配置してください。
表示範囲があまりに小さいと文字が見切れてしまいます。


インスペクター画像



 以上で完成です。
他にもデバッグ機能として使いたい機能があれば、適宜追加しましょう。


47.DebugManager スクリプトを作成し、デバッグ用の機能を実装する

1.設計


 デバッグ機能として実際に制御するための処理を、DebugManager スクリプトを作成して処理をまとめておきます。

 作成した DebugManager スクリプトは専用のゲームオブジェクトを作成して、そちらにスクリプトをアタッチして利用する設計にします。
DebugManager スクリプトはシングルトンクラスにする設計とし、すべてのスクリプトから参照が容易な設計にしておきます。

 このようにしておくことで、特に Debug.Log をゲーム画面に表示するメソッドについては
いずれのスクリプトでも呼び出し命令を実行出来るようになります。


2.DebugManager スクリプトを作成する


 サンプル用にいくつかの処理を実装しています。
自分で使い方を考えてみていただいて、自分で作ってみる際にも参考にしてください。

 デバッグ機能のポイントとしては、シングルトンクラスになっているので、メソッドへの命令が外部クラスから実行しやすいこと、
デバッグ機能の切り替え用のスイッチを用意することで、ゲーム実行時に自動的にデバッグ機能の有効化/無効化をインスペクターから設定し、スクリプトが制御すること、などがあります。

 特にデバッグ用の切り替えを用意しておかないと、デバッグしない場合に逐一、対象のゲームオブジェクトのスイッチを手動で操作しないとならなくなりますので、
そういった利便性も含めた設計にしておくことを推奨します。

 今回はデバッグ機能自体を有効化/無効化にて切り替えしていますが、もっと細かく用意してもよいですし、
他の機能についてもここに登録をして切り替えられるようにしても便利です。

 自分が作業を行いやすい環境を、自分で設計して整えるようにしていきましょう。


DebugManager.cs

<= クリックすると開きます


 スクリプトを作成したらセーブします。

 ReloadScene メソッドはボタンへの登録がないため、Unity エディター上でしか実行できません。
もしも実機にて実装するのであれば、新しくボタンのゲームオブジェクトを作成し、そちらのメソッドを登録して利用するようにします。

 自分で実装できるか、挑戦してみるといいでしょう。


3.DebugManager ゲームオブジェクトを作成して、DebugManager スクリプトをアタッチし、設定を行う


 ヒエラルキー上のないもない部分で右クリックをしてメニューを表示し、Create Empty を選択します。
新しいゲームオブジェクトが1つ作成されますので、名前を DebugManager に変更します。

 DebugManager ゲームオブジェクトに、DebugManager スクリプトをドラッグアンドドロップしてアタッチします。

 DebugManager ゲームオブジェクトのインスペクターを確認し、DebugManager スクリプトの情報を確認します。
SerializeField 属性にて宣言している変数が表示されていますので、先ほど作成したデバッグ機能用のゲームオブジェクトをアサインして登録します。

 また isDebugModeOn 変数の値を true (スイッチをチェックしてオンにする) に変更して、デバッグ機能を有効化します。


インスペクター画像



 以上で設定は完了です。


4.ログ表示したい処理に応じて DisplayDebugDialog メソッドを追加する


 DebugManager クラスはシングルトンクラスで作成していますので、public 修飾子のメソッドについてはいずれのクラスからでも参照して、自由に呼び出し命令を実行できます。

 DisplayDebugDialog メソッドはゲーム画面上にログを表示させるためのメソッドですので、
Unity エディターで Console ビューに表示させていた内容をゲーム画面にも表示したい場合に利用してください。

 この機能を利用することにより、実機でのテスト中でも Console ビューと同じ機能をゲーム画面に実装できますので、デバッグがはかどります。

 例えば、現在 Debug.Log メソッドを実行しているお使いの時間管理、セーブ・ロードの処理の後にいれたりしておくと、
自分がいつも Console ビューで確認していた内容が同じタイミングでゲーム画面に表示されるため、非常に効果的です。


<OfflineTimeManager クラス CalculateOfflineDateTimeElasped メソッド内>
  Debug.Log($"オフラインでの経過時間 : {elaspedTime} 秒");

  DebugManager.instance.DisplayDebugDialog($"オフラインでの経過時間 : {elaspedTime} 秒");   // 同じ内容でゲーム画面にログを表示するようにする

<PlayerPrefsHelper クラス AllClearSaveData メソッド>
    public static void AllClearSaveData() {
        PlayerPrefs.DeleteAll();

        Debug.Log("全セーブデータを削除 実行");

        DebugManager.instance.DisplayDebugDialog("全セーブデータを削除 実行");        // 同じ内容でゲーム画面にログを表示するようにする
    }


5.ゲームを実行して動作を確認する


 ゲームを実行し、デバッグの機能を確認してください。
自分が実装している処理について順番に確認しておくことで、実際のデバッグ時に役立ちます。

 また、デバッグ機能のスイッチによって切り替えが制御されているかも確認しておいてください。


<デバッグ機能 ―萢のログ表示>
動画ファイルへのリンク


<デバッグ機能◆.察璽屮如璽燭琉豎膾鐔>
動画ファイルへのリンク


<デバッグ機能 デバッグ機能の有効化/無効化の切り替え>
動画ファイルへのリンク


 以上でこの手順は終了です。

 次は 手順27 −自分で処理を組み立てる− です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます