本日は Unity の技術調査枠です。
アプリ内でログを表示する方法について教えて貰えたのでまとめます。
ログの表示イベントをキャッチするには以下の Application.logMessageReceived を使います。
docs.unity3d.com
本イベントからは以下の情報が取得可能です。
logString:ログメッセージ
stackTrace:スタックトレースメッセージ
type:ログ種別(Error,Assert,Warning,Log,Execption)
実際に試してみます。以前、作成したタブレット3DモデルにTextオブジェクトを設定します。
以下のようなスクリプトを作成してみました。
・LogMessageManager.cs
public class LogMessageManager : MonoBehaviour { /// <summary> /// デバッグログ用テキストオブジェクト /// </summary> [SerializeField, Tooltip("デバッグログ用テキストオブジェクト")] private GameObject p_TargetDebugPanelObject; /// <summary> /// デバッグログ用テキスト /// </summary> private UnityEngine.UI.Text p_Text; /// <summary> /// 表示行数 /// </summary> [SerializeField, Tooltip("表示行数")] private int p_LineNum = 17; /// <summary> /// 保持テキスト /// </summary> private string p_TextMessage; /// <summary> /// 初期化関数 /// </summary> private void Start() { // Logメッセージイベント追加 Application.logMessageReceived += LogMessageOutput; p_Text = p_TargetDebugPanelObject.GetComponent<UnityEngine.UI.Text>(); } /// <summary> /// Logメッセージイベント処理 /// </summary> private void LogMessageOutput(string condition, string stackTrace, LogType type) { string textmessage = p_TextMessage; textmessage += condition + System.Environment.NewLine; string newline = System.Environment.NewLine; string [] lines = textmessage.Split(new string[] { newline }, System.StringSplitOptions.RemoveEmptyEntries); if (lines.Length > p_LineNum) { textmessage = ""; for (int line = lines.Length - p_LineNum; line < lines.Length; line ++) { textmessage += lines[line] + System.Environment.NewLine; } } p_TextMessage = textmessage; p_Text.text = textmessage; } }
デバッグログ用テキストオブジェクトにTextオブジェクトを設定して起動します。
アプリ内でタブレットを見てみると……。
アプリ内でログが確認できました。
解像度の問題があるので、文字サイズは実際に試しながら調整するとよいです。
hololens内でアプリを動かしながらログが確認できるので、実際に動き回る必要があるデバッグの際に特に役立ちそうです。