はじめに
本記事はUnity Advent Calendar 2017の3日目の記事です。
昨日は takashicompany さんのプレイヤーの見ている画面とは別視点からのリプレイ動画を
お手軽に作れないか頑張った話【Unity Advent Calendar 2017】でした!
SRDebugger
- 実機でコンソールログを確認したい
- 実機でプロファイラーを確認したい
- 特定の状態を再現するためにキャラクターのステータスなどを変更したい
上記のような機能が必要になる場面は多々あると思います。
それらの要望を手軽に実現出来るアセットがSRDebugger - Console & Tools On-Deviceです。
導入方法
SRDebuggerをプロジェクトにインポートするだけで導入出来ます。
シーンを実行すると必要なプレハブやEventSystemが生成されるため、
すぐにSRDebuggerを起動することが出来ます。
※ 初期設定では左上に隠れている矩形UIを3回タップ(クリック)することで起動することが出来ます
設定の変更
Window > SRDebugger > Settings Window
から設定を変更することが出来ます。
機能 | Disabled | Prefab | Automatic | |
---|---|---|---|---|
① | ロード方法 | SRDebugger.Init()メソッドを手動で呼び出す | SRDebugger.Initプレハブをシーンに配置する | シーン実行時に自動でロードする |
機能 | Triple Tap | Tap And Hold | Double Tap | |
---|---|---|---|---|
② | 起動方法 | 3回タップする | 0.9秒間長押しする | 2回タップする |
機能 | System Information | Options | Console | Profiler | Bug Reporter | |
---|---|---|---|---|---|---|
③ | 起動時のデフォルトタブ | 端末情報やUnityのバージョンを表示するタブ | 自作のデバッグ機能を表示するタブ | コンソールログを表示するタブ | プロファイラーを表示するタブ | バグレポートを送信するタブ |
実機でコンソールログを確認する
コンソールタブからログを見ることが出来ます。
フィルタリングやログのクリアも可能です。
余談ですが、Unity2017.1.0f1から実機をUnityエディタのコンソールに繋いで
ログを出力することが出来るようになったみたいです。
Unity2017.1.0f1のリリースノート日本語訳 その2
実機でプロファイラーを確認する
FPSやメモリ使用量を見ることが出来ます。
ガベージコレクションやリソースの解放を行うことも可能です。
SRDebuggerのタブはピン留めをして常駐させることが出来ます。
上記のgif画像ではピン留めをしてから100個ずつプリミティブなオブジェクトを生成した後に
Debug.Logを100回呼び出しており、著しく処理負荷が掛かっていることが分かります。
Unityエディタのプロファイラーほどの精度はありません
CPUかGPUのどちらがボトルネックになっているかを識別するためのツールです
オプションタブにデバッグ機能を実装する
デバッグ機能の実装
デバッグ機能を実装するためにスクリプトを作成します。
今回はSROptions.Generalスクリプトを作成しました。
本クラスはSROptionsクラスのpartialクラスであるため.で区切る命名規則にしています。
using UnityEngine;
using System;
using System.ComponentModel;
/// <summary>
/// 全般のデバッグ機能
/// </summary>
public partial class SROptions
{
#region 定数
/// <summary>
/// 全般カテゴリ
/// </summary>
private const string GeneralCategory = "General";
#endregion
#region デバッグ機能
[Category(GeneralCategory)]
[DisplayName("TimeScale")]
[Sort(0)]
[Increment(0.1)]
[NumberRange(0.0, 10.0)]
public float TimeScale
{
get { return Time.timeScale; }
set { Time.timeScale = value; }
}
[Category(GeneralCategory)]
[DisplayName("DisplayDateTime")]
[Sort(1)]
public void DisplayDateTime()
{
Debug.Log(DateTime.Now.ToString("yyyy/MM/dd"));
}
[Category(GeneralCategory)]
[DisplayName("LightEnabled")]
[Sort(2)]
public bool LightEnabled
{
get { return GameObject.FindObjectOfType<Light>().enabled; }
set { GameObject.FindObjectOfType<Light>().enabled = value; }
}
#endregion
}
カスタムアトリビュートの紹介
カスタムアトリビュート名 | 機能 |
---|---|
Category | カテゴリを設定する |
DisplayName | 表示名を設定する |
Sort | カテゴリ内の表示順序を設定する |
Increment | 増減する任意の値を設定する |
NumberRange | 値の下限と上限を設定する |
実行結果
タブの拡張方法
画像アップロード容量の上限のため下記の記事にまとめました。
【Unity】SRDebuggerのタブの拡張方法
参考記事
おわりに
SRDebuggerは導入の手軽さと拡張性の高さを兼ね備えた素晴しいアセットです。
興味を惹かれた方はお手に取ってみてはいかがでしょうか。
明日のUnity Advent Calendar 2017は tsubaki_t1 さんの【Unity】Timelineで敵の”出現タイミング”や”動き”を制御してみるです!