『In-Game Debug Log for AR and VR devices』で XR のデバッグを楽にする

今回の記事はアセット紹介です.

はじめに

この記事は『Unity アセット真夏のアドベントカレンダー 2020 Summer !』の8月23日の記事です.

昨日はkarukaruさんの「DoozyUIとModern UIでUnity(uGUI)臭さを消してみる」でした.

karukaru808.hatenablog.com

In-Game Debug Log for AR and VR devices

このアセットは2020年7月13日にリリースされたばかりで,比較的新しいアセットです.

assetstore.unity.com

ARやVRバイス用の軽量なゲーム内デバッグログです.
コンソールが通常行うことを何でも出力してくれます.

機能

Asset Store にも書かれていますが,本アセットの機能は以下の通りです.

  • プラットフォームに依存しないコード
  • IL2CPPとMonoの両方で動作
  • カスタマイズ可能な出力
  • すべてのスレッドとすべてのコルーチンからのメッセージを出力する
  • 目に留まることのないように画面スペースのレイアウト
  • CC BYライセンスでコードを編集しやすい(改良・再利用・再配布可能)

目に留まることのないように適当なスペースにログを置けるのが強みです.
実機確認が必要なスタンドアロンバイス,例えば Oculus Quest や HoloLens 2 等には便利なアセットだと思います.

必要環境要件

Unity 2019.3.5 以降でないと利用できないので注意.Unity 2019.2 以前だと Import できません.
(マニュアルでは Unity 2018.3 以降で使えると書かれていますが…)

Text Mesh Pro の Import

使い方

まずは Import ・ Download します.

プレハブ配置

Prefabs フォルダを開くと,ExceptionLog,InformationLog,WarningLogのプレハブがあるので,
こちらをHierarchyに配置し,好きな場所に置くだけです.

f:id:xrdnk:20200822225549p:plain

f:id:xrdnk:20200822225641p:plain

Debug Log Panel スクリプト

もしプレハブに頼らずにカスタマイズしたい場合,Debug Log Panel スクリプトをアタッチすればよいです.

f:id:xrdnk:20200822230116p:plain

Debug Log Panel スクリプトの項目はこんな感じ.

Visual Feedback / Log Level

プレハブはWarning,Log,Exceptionのものが提供されていますが,他にもError,Assertもあります.

Log

単に Debug.Log() の呼び出しから来るものを参照します.

Exception

例えば NullReferenceExceptions などの例外を表示します.
エラーとは異なり,例外は実行時に処理できます.

Warning

使用しているメソッドが非推奨になった場合など,通常はアプリに直接影響を与えない警告を表示します.

Error

例外と似ていますが,実行時には処理できません.
エラーは通常,アプリセッション(とUnity)の終了のシグナルとなるため,
これをログに記録してもあまり意味がありません.

Assert

アプリを進めるために満たす必要がある条件を指します.
条件が失敗した場合,メッセージと対応するスタックトレースが出力されます.

Visual Feedback / Max Number Of Messeges

最大で表示できるメッセージ数です.これを超えると古いメッセージが消えます.

Visual Feedback / Include Stack Trace

メッセージにスタックトレースを含めるかどうか設定できます.

Auditory Feedback / Play Sound On Message

Debug Log Panel をアタッチしたオブジェクトに Audio Source を追加する必要があります.
こちらをチェックすると,画面にメッセージが出力されるたびに,サウンドが再生されます.

たとえば,ExceptionLogプレハブはこんな感じでAudioSourceが追加されています.

f:id:xrdnk:20200822231249p:plain

実際に使ってみる

実際に使ってみるとこんな感じです.

サンプルスクリプト

using UnityEngine;

public class LogTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        for (int i = 1; i <= 15; i++)
        {
            Debug.Log("Log Test Message" + i);
        }

        for (int i = 1; i <= 15; i++)
        {
            Debug.LogWarning("Warning Test Message" + i);
        }
    }
}

f:id:xrdnk:20200822232557p:plain

Debug.Log,Debug.LogWarningで囲ったものが視覚化されて表示されます.

終わりに

VR Ready PC を持っていて Oculus Link が出来る場合ならば,Oculus Quest のデバッグは簡単ですが,
もしない場合はQuestのデバッグ作業の手間が面倒です.HoloLens 2 も Holographic Remoting を駆使すれば,
一応デバッグは出来ますが,HoloLens 2 のハードウェア自体を利用する場合は,Holographic Remoting では確認できません.

ですので,このアセットのプレハブをHierarchyに配置するだけで,デバッグ作業の手間が省けると思います.

以上です.

明日のUnity アセット真夏のアドベントカレンダー 2020 Summer !
yunodaさんによる「AmplifyShaderEditorがまだまだ現役なの知ってほしい」です.