この記事でのバージョン
Unity 2018.2.17f1
はじめに
今回はConsoleを実機上で表示したり、デバッグ用のコマンドを実装するアセット
In-game Debug Consoleの紹介です!しかも無料!
In-game Debug Console - Asset Store |
イメージとしては以下のような感じ。
なお、記事中の画像は以下のアセットを使っております。
Corgi Engine - 2D + 2.5D Platformer - Asset Store |
In-game Debug Console
まず、導入からですが、IngameDebugConsoleというPrefabを設置するだけ。
すると画面に小さいConsoleみたいなのが表示されるので、これを押すと
Consoleが表示され、ログを確認出来るようになります。
もちろん、ログが発生したプログラムの位置も表示されまます。
デバッグコマンド
さらにIn-game Debug Consoleはコンソール下部で特定の文字(Helpとか)を打って処理を実行する
いわゆるデバッグコマンドを実装する事も出来ます。
実装方法も簡単で、
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); } }
なお、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); }
引数には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); }
おわりに
前回紹介した実機上でInspectorとHierarchyの表示&操作が出来る
Runtime Inspector & Hierarchyと合わせれば、
エディタ上とかなり近い感覚で、実機上でのチェックも行えそうです。
なお、Consoleを実機上で表示すると言えばSRDebuggerもありますが、
SRDebugger - Console & Tools On-Device - Asset Store |
SRDebuggerはConsoleだけでなく簡易プロファイラも表示出来ますし、
何よりデバッグメニューを簡単に作れる(むしろこっちがメイン)ので、
有料でも問題ないので、あればこちらもオススメです。