Unityのデバッグログ(Debug.Log)を実機の画面に表示させて確認する方法のメモ。
今回作るのはこんな感じのもの。OnGUIで特にいじらずシンプルに。
記事下のおまけにもっと表示をいじったものを貼ってありますが、気になる方などはぜひ最後まで。
ログを受け取る
受け取る前にクラスを用意しておく。受け取る時は
string:メッセージ
string:スタックトレース
LogType:ログの種類
の3つが取れるので対応する項目を作る。こんな感じ。
/// <summary> /// ログの内容 /// </summary> public class LogData { // メッセージ public string condition; // スタックトレース public string stacktrace; // ログの種類 public LogType type; /// <summary> /// コンストラクタ /// </summary> /// <param name="condition">メッセージ</param> /// <param name="stacktrace">スタックトレース</param> /// <param name="type">ログの種類</param> public LogData( string condition, string stacktrace, LogType type ) { this.condition = condition; this.stacktrace = stacktrace; this.type = type; } }
クラスを作れたら、上のログLogData
の型でリストを用意して、
そこに入ってきたログの情報を貯めていくようにする。
// ログリスト private List< LogData > m_LogEntries = new List< LogData >( );
用意ができたらログを受け取れるようにする。
受け取る関数を用意したら、先程用意したログのリスト(m_LogEntries)に追加する処理を書く。
また、開始時や有効時、終了、無効時にログのコールバックイベントの登録/破棄をそれぞれ設定する。
受け取る関数を用意していてもコールバックイベントを登録していなければ受け取れないので注意。
void Start( ) { // コールバックイベントを登録する Application.logMessageReceived += this.LogReceive; } void OnDestroy( ) { // コールバックイベントを破棄する Application.logMessageReceived -= this.LogReceive; } /// <summary> /// ログが出力されるたびに呼ばれる /// </summary> /// <param name="condition">メッセージ</param> /// <param name="stackTrace">スタックトレース</param> /// <param name="type">ログの種類</param> public void LogReceive( string condition, string stackTrace, LogType type ) { // スタックトレースを置き換え stackTrace = stackTrace.Trim( ); if ( string.IsNullOrEmpty( stackTrace ) ) { // System.Diagnosticsが必要。ファイル、行数を表示できる stackTrace = new StackTrace( true ).ToString( ); } LogData log = new LogData( condition.Trim( ), stackTrace, type ); // ログを追加 m_LogEntries.Add( log ); }
これでログをリストに格納していくことができる。
後はOnGUIでもuGUIでも良いのでリストから取得して表示する。
下はOnGUIで書く場合の例。ログをboxのスキンで表示するようにしてみた。
void OnGUI( ) { // スタイルの設定 GUIStyle logStyle = new GUIStyle( GUI.skin.box ); logStyle.alignment = TextAnchor.UpperLeft; logStyle.richText = true; logStyle.wordWrap = true; // ログの描画 for ( int i = m_LogEntries.Count - 1; i >= 0; --i ) { string text = string.Format( "{0}\n{1}", m_LogEntries[ i ].condition, m_LogEntries[ i ].stacktrace ); GUILayout.Box( text, logStyle ); } }
ログを画面に表示させてみる
キーを押したらログが出るようにしてみる。
それぞれ対応するテキストを出すようにした。
void Update( ) { if ( Input.GetKeyDown( KeyCode.I ) ) UnityEngine.Debug.Log( "Logだよ" ); if ( Input.GetKeyDown( KeyCode.W ) ) UnityEngine.Debug.LogWarning( "Warningだよ" ); if ( Input.GetKeyDown( KeyCode.E ) ) UnityEngine.Debug.LogError( "Errorだよ" ); }
このようにログの内容を画面に表示させることができた。
今回作成したソースをあげました。
おまけ
もっとOnGUIの表示をいじっていくとこんな感じにできる。
これはuGUIに移行する前に自分が使っていたデバッグコンソール。
ログ内容がクリックすると出てくるみたいな。
なるべく実際のプレイに近い環境で表示させたい!って場合はuGUIで表示させて、
特に気にしてなければOnGUIに書いていく感じがいいかもです。