ゲームを作っているとゲーム内のパラメータを調整したいことがしばしばあります。例えばアクションゲームの残機を増やしたり、RPGのゴールドや経験値を増やしたり。ちゃんとしたデバッグ機能を追加するのも良いですがめんどくさいですよね。ということを簡単に実装できるのが今回紹介するアセットになります。自作しようかと思ってたんですが、無料のがあったのでこれ使えばいいじゃんと思いました。
Smart Consoleとは?
ゲームプレイ中にコマンドを打ち込んでデバッグ機能を動かしたり、ゲーム画面でログを確認することができる機能です。開発者のかゆいところに手がとどく一品となっています。
https://assetstore.unity.com/packages/tools/utilities/smart-console-free-236566
デモ動作
パッケージをインポートしたらAssets/Smart Console/Prefabs/Consoleプレファブをシーン内にドラッグアンドドロップで追加してください。
シーン内に配置したConsoleゲームオブジェクトに、Assets/Smart Console/Demo/Scripts/DefaultCommandsスクリプトをアタッチしてください。アタッチ方法は何でも大丈夫です。今回はコマンドのスクリプトのアタッチ場所を指定していますが、シーン内であればどこでも大丈夫です。
ゲームを起動するとGameビューにコンソール用のウインドが表示されていると思います。Enter commandにカーソルをあわせて以下のコマンドを入力してSubmitボタンを押すか、Enterで決定してください。
print_hello_world
コマンドを打ち切ると、ゲームビューのコンソールと、Unityエディターのコンソールビューに「Hello World!」というログが表示されます。
新規コマンドを追加する
新しいスクリプトで試しても良いですが、先程貼り付けたDefaultCommandsスクリプトを拡張して見たいと思います。DefaultCommandsクラス内に下記メソッドを追加してください。
[Command]
public void new_method()
{
Debug.Log("add new method");
}
スクリプトが変更出来たら、先程の手順でnew_methodというコマンドを打ち込むと「add new method」というログが表示されると思います。
あとはゲーム内で実行したいデバッグ機能などを各自実装することで、デバッグが簡単になります!
引数ありのコマンドも追加する
引数は普通通りにメソッドを追加していけば大丈夫です。コマンドを入力するときは、メソッド名の後ろにスペースを入れて入力します。
[Command]
public void arg_method(int arg1 , string arg2)
{
Debug.Log($"arg1={arg1} arg2={arg2}");
}
おすすめのカスタマイズなど
ここからは私が使うときにやっておいたほうが便利と感じる設定になります。お好みに合わせてご活用ください。
ConsoleSystemのコンポーネント設定
シーン内に配置したConsoleのコンポーネントにConsoleSystemがあります。これらのインスペクター設定を行います。とりあえず表示非表示だけでもやっておかないとゲームしづらいっすね。
項目 | 内容 |
---|---|
Open Close Key Code | コンソールの表示非表示を行うショートカット 下図はEscapeキーで行います |
Autocomplete Key Code | コマンドを途中まで打ってて、入力補完が行えるキー 下図はTabキーを割り当て |
Show Application Log Message | コンソールビューに表示されているログを表示するかどうか 個人的にはあってもいいかな?状況によるかも |
Open At Start | 起動時にコンソールが表示されるかどうか アプリリリース時にこれが入ったままだと悲惨なことになりそう。 要注意 |
On Open Close Event | これはスマホなんかの実機で行う場合に、ゲーム内の特定のボタンで コンソールの表示非表示の切り替えを行いたい場合に利用 Closeはデフォルトであるので、一方的に表示するだけでいいかも |
見やすくする
表示非表示ができれば一応いいんすけど、コンソール表示が色濃すぎてコンソール見ながらゲームができないんですよね。ということで以下の点を変更して見やすくしましょう。
PanelMain
シーン内に追加したConsole以下のPanelMainゲームオブジェクト内のImage>Colorのアルファを下げます。
プレファブのLogMessageSetupコンポーネント内
もう1箇所はAssets/Smart Console/Prefabs/LogMessageプレファブのLogMessageSetupコンポーネント内を変更します 。こちらもアルファを変更しますが、先程のメインパネルよりは少し濃い目のアルファに変更してみてください。
- BackgroundColor1>アルファ150ぐらい
- BackgroundColor2>アルファ150ぐらい
警告やエラーは表示させない・もしくはその逆
ログが表示できる機能はとても便利なのですが、警告やエラーの表示が多くて一部のログ表示をマスクしたいと言うときは、スクリプトを少し変更してあげることで対応出来ます。
ConsoleSystem.csを変更。下のスクリプトは警告表示のみを非表示にした変更になります。対応している行をコメントアウトすることでマスクできますよ。
private void SubmitLog(string logString, string stackTrace, LogType type)
{
LogMessageTypes messagetype = type switch
{
LogType.Log => LogMessageTypes.Log,
LogType.Error => LogMessageTypes.Error,
LogType.Assert => LogMessageTypes.Error,
//LogType.Warning => LogMessageTypes.Warning,
LogType.Exception => LogMessageTypes.Error,
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
};
LogMessage logMessage = new LogMessage(logString, messagetype);
OnSubmitLogMessage?.Invoke(logMessage);
}
日本語化
今更ですが、TextMeshProを使っている関係上、デフォルトのままだと日本語が使えません。日本語を利用する場合は少しだけ設定が必要です。
変更する場合はLogMessageプレファブの中身まで入り、LogTextというゲームオブジェクトのTextMeshProコンポーネントのFontAssetを日本語対応のフォントにしてください。
日本語対応したフォントを作りたい場合はこちらのリンクを参考にしてください。
ただ、ここでフォローできるのは表示されるログのみです。コマンドを入力するところも日本語対応する場合は関連しているTextMeshProのフォントアセットをすべて日本語対応に差し替えてください。