(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]

実機上でConsoleが表示でき、デバッグコマンドも実装可能なIn-game Debug Console【Unity】【アセット】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2018.2.17f1


はじめに

今回はConsoleを実機上で表示したり、デバッグ用のコマンドを実装するアセット

In-game Debug Consoleの紹介です!しかも無料




イメージとしては以下のような感じ。

f:id:kan_kikuchi:20190712062053g:plain


なお、記事中の画像は以下のアセットを使っております。






In-game Debug Console

まず、導入からですが、IngameDebugConsoleというPrefabを設置するだけ

f:id:kan_kikuchi:20190710051619j:plain


すると画面に小さいConsoleみたいなのが表示されるので、これを押す

f:id:kan_kikuchi:20190710052020j:plain


Consoleが表示され、ログを確認出来るようになります。

もちろん、ログが発生したプログラムの位置も表示されまます。

f:id:kan_kikuchi:20190710052040j:plain



デバッグコマンド

さらにIn-game Debug Consoleはコンソール下部で特定の文字(Helpとか)を打って処理を実行する

いわゆるデバッグコマンドを実装する事も出来ます。

f:id:kan_kikuchi:20190711111515j:plain


実装方法も簡単で、

DebugLogConsole.AddCommandInstanceでメソッドを登録するだけ。

using UnityEngine;
using IngameDebugConsole;

public class NewBehaviourScript : MonoBehaviour {

  private void Start(){
    //コマンドを登録(引数はコマンド名, コマンドの説明, 実行するメソッド名, メソッドが実装されているクラスのインスタンス)
    DebugLogConsole.AddCommandInstance( "Reload", "現在のシーンをロードし直す", "ReloadScene", this);
  }

  //現在のシーンをロードし直す(Reloadとコマンドを打つと実行される)
  private void ReloadScene(){
    Debug.Log("リロードします!");
    SceneManager.LoadScene(SceneManager.GetSceneAt(0).name);
  }
    
}
f:id:kan_kikuchi:20190711115404g:plain


なお、Staticなメソッドも登録可能で、その場合は

DebugLogConsole.AddCommandStaticを使います。

private void Start(){
  //コマンドを登録(引数はコマンド名, コマンドの説明, 実行するメソッド名, メソッドが実装されているクラス)
  DebugLogConsole.AddCommandStatic( "Reload", "現在のシーンをロードし直す", "ReloadScene", typeof( NewBehaviourScript ) );
}

//現在のシーンをロードし直す(staticメソッドに変更)
private static void ReloadScene(){
  Debug.Log("リロードします!");
  SceneManager.LoadScene(SceneManager.GetSceneAt(0).name);
}


また登録するメソッドは引数が付ける事もでき、

その場合はコマンド名の後に引数に渡す値を入力します。


以下の例であれば、Load Lavaというコマンドを打つと、sceneNameが "Lava"のLoadSceneが実行される

といった感じです。

private void Start(){
  //コマンドを登録(引数はコマンド名, コマンドの説明, 実行するメソッド名, メソッドが実装されているクラス)
  DebugLogConsole.AddCommandStatic( "Load", "シーンをロードします", "LoadScene", typeof( NewBehaviourScript ) );
}

//指定したシーン名のシーンをロードする
private static void LoadScene(string sceneName){
  Debug.Log(sceneName + "をロードします!");
  SceneManager.LoadScene(sceneName);
}
f:id:kan_kikuchi:20190712055732g:plain


引数にはintやstringといった基本的な型や、Vector系(2, 3, 4)、GameObjectが使えます。

なお、GameObjectは名前を指定し、その名前のGameObjectをFindで探す感じらしいです。

private void Start(){
  //コマンドを登録(引数はコマンド名, コマンドの説明, 実行するメソッド名, メソッドが実装されているクラス)
  DebugLogConsole.AddCommandStatic( "Hide", "GameObjectを非表示にします", "HideGameObject", typeof( NewBehaviourScript ) );
}

//GameObjectを非表示にする
private static void HideGameObject(GameObject targetObject){
  Debug.Log(targetObject.name + "を非表示にします!");
  targetObject.SetActive(false);
}
f:id:kan_kikuchi:20190712060514g:plain



おわりに

前回紹介した実機上でInspectorとHierarchyの表示&操作が出来る

Runtime Inspector & Hierarchyと合わせれば、

f:id:kan_kikuchi:20190709195251g:plain


エディタ上とかなり近い感覚で、実機上でのチェックも行えそうです。

f:id:kan_kikuchi:20190712064903j:plain


なお、Consoleを実機上で表示すると言えばSRDebuggerもありますが、


f:id:kan_kikuchi:20180524085806j:plain


SRDebuggerはConsoleだけでなく簡易プロファイラも表示出来ますし、


f:id:kan_kikuchi:20180524092900j:plain


何よりデバッグメニューを簡単に作れる(むしろこっちがメイン)ので、

有料でも問題ないので、あればこちらもオススメです。


f:id:kan_kikuchi:20190217120231g:plain:w700