はじめに

本記事はUnity Advent Calendar 2017の3日目の記事です。

昨日は@takashicompanyさんのプレイヤーの見ている画面とは別視点からのリプレイ動画を
お手軽に作れないか頑張った話【Unity Advent Calendar 2017】
でした!

SRDebugger

  • 実機でコンソールログを確認したい
  • 実機でプロファイラーを確認したい
  • 特定の状態を再現するためにキャラクターのステータスなどを変更したい

上記のような機能が必要になる場面は多々あると思います。
それらの要望を手軽に実現出来るアセットがSRDebugger - Console & Tools On-Deviceです。

2017-12-02_19h49_04.png

導入方法

SRDebuggerをプロジェクトにインポートするだけで導入出来ます。
シーンを実行すると必要なプレハブやEventSystemが生成されるため、
すぐにSRDebuggerを起動することが出来ます。

※ 初期設定では左上に隠れている矩形UIを3回タップ(クリック)することで起動することが出来ます
ss1.gif

設定の変更

Window > SRDebugger > Settings Windowから設定を変更することが出来ます。
2017-12-02_22h43_11.png
2017-12-02_22h52_01.png

機能 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のバージョンを表示するタブ 自作のデバッグ機能を表示するタブ コンソールログを表示するタブ プロファイラーを表示するタブ バグレポートを送信するタブ

2017-12-03_00h24_30.png

実機でコンソールログを確認する

ss2.gif

コンソールタブからログを見ることが出来ます。
フィルタリングやログのクリアも可能です。

余談ですが、Unity2017.1.0f1から実機をUnityエディタのコンソールに繋いで
ログを出力することが出来るようになったみたいです。
Unity2017.1.0f1のリリースノート日本語訳 その2

実機でプロファイラーを確認する

ss3.gif

FPSやメモリ使用量を見ることが出来ます。
ガベージコレクションやリソースの解放を行うことも可能です。

SRDebuggerのタブはピン留めをして常駐させることが出来ます。
上記のgif画像ではピン留めをしてから100個ずつプリミティブなオブジェクトを生成した後に
Debug.Logを100回呼び出しており、著しく処理負荷が掛かっていることが分かります。

Unityエディタのプロファイラーほどの精度はありません
CPUかGPUのどちらがボトルネックになっているかを識別するためのツールです

2017-12-03_03h56_59.png

オプションタブにデバッグ機能を実装する

デバッグ機能の実装

デバッグ機能を実装するためにスクリプトを作ります。
今回はSROptions.Generalスクリプトを作りました。
本クラスはSROptionsクラスのpartialクラスであるため.で区切る命名規則にしています。

2017-12-03_09h46_04.png

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 値の下限と上限を設定する

実行結果

ss4.gif

参考記事

公式ドキュメント

おわりに

SRDebuggerは導入の手軽さと拡張性の高さを兼ね備えた素晴しいアセットです。
興味を惹かれた方は現在セール中ですのでお手に取ってみてはいかがでしょうか。

タブの拡張方法は今週中に追記いたします。

明日のUnity Advent Calendar 2017@tsubaki_t1さんの【Unity】Timelineで敵の”出現タイミング”や”動き”を制御してみるです!