MRが楽しい

MRやVRについて学習したことを書き残す

Hdg Remote Debugを利用してHoloLens上でシーンをデバッグする

本日は HoloLens の調査枠です。
Hdg Remote Debugを利用してHoloLensにデプロイしたアプリケーションをデバッグする方法を記事にします。
f:id:bluebirdofoz:20200217094154j:plain

Hdg Remote Debugとは

assetstore.unity.com
f:id:bluebirdofoz:20200217094004j:plain

Hdg Remote DebugはUnityのライブアップデートおよびデバッグツールです。
バイスにデプロイされた後に、シーンのゲームオブジェクト、コンポーネント、シリアル化されたフィールドを検査できます。

Unityエディター上で、ライブビルドのフィールドを調整できます。
UIレイアウトやタッチコントロールなどの設定変更をすばやく繰り返すのに最適です。
Unityがサポートするほぼ全てのプレーヤープラットフォームでビルドをデバッグできます。

Tokyo HoloLens ミートアップ vol.19 の石山氏セッションで紹介され、興味を持ったので購入して試してみました。
docs.google.com

シーンの作成

以下のページの手順に従って HoloLens 用の Unity プロジェクトとシーンを作成します。
bluebirdofoz.hatenablog.com
f:id:bluebirdofoz:20200217094309j:plain

Hdg Remote Debugのインポート

[Asset Store]ウィンドウで Hdg Remote Debug のページを開き、[Import]を行います。
f:id:bluebirdofoz:20200217094323j:plain

Hdg Remote Debug を[Import]すると、Plugins/HdgRemoteDebug ディレクトリが作成されます。
f:id:bluebirdofoz:20200217094332j:plain

メニューには Window -> HdgRemoteDebug が追加されています。
これをクリックすると、リモートデバイスデバッグするための RemoteDebug ウィンドウが開きます。
f:id:bluebirdofoz:20200217094409j:plain

サーバーの設定

Plugins/HdgRemoteDebug 配下の RemoteDebugServer.prefab をシーンに追加します。
RemoteDebugServer は Unity と通信するサーバーの役割を果たします。
f:id:bluebirdofoz:20200217094421j:plain

次に通信にはネットワークを利用するため、InternetClientServer の Capability を有効にしておく必要があります。
メニューから Edit -> Project Settings を開きます。
f:id:bluebirdofoz:20200217094431j:plain

Publishing Settings内の Capabilities から[InternetClientServer]にチェックを入れます。
これで HdgRemoteDebug を使ってリモートデバイスデバッグする準備が整いました。
f:id:bluebirdofoz:20200217094440j:plain

デバッグスクリプトの作成

Hdg Remote Debugでデバッグ操作を行うためのパブリックフィールドを持った以下のスクリプトを作成しました。
・TestScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    // デバッグ操作用のパブリックフィールド
    // アタッチオブジェクトのスケールの倍率を数値設定する
    public int scalemag = 1;

    // デバッグ操作用のパブリックフィールド
    // アタッチオブジェクトのマテリアルの色をboolで切り替える
    public bool blackflg = false;

    // ベーススケール保持用変数
    private Vector3 m_BaseScale;

    // マテリアル変更用変数
    private MaterialPropertyBlock m_PropertyBlock;
    private Renderer myRenderer;

    void Start()
    {
        // ベースとなるスケールを保存する
        m_BaseScale = new Vector3(
            this.transform.localScale.x,
            this.transform.localScale.y,
            this.transform.localScale.z
            );

        // マテリアルの参照を取得する
        myRenderer = GetComponent<Renderer>();
        m_PropertyBlock = new MaterialPropertyBlock();
    }

    void Update()
    {
        // パブリックフィールドの数値に応じてスケールを変更する
        this.transform.localScale = new Vector3(
            m_BaseScale.x * scalemag,
            m_BaseScale.y * scalemag,
            m_BaseScale.z * scalemag
            );

        // パブリックフィールドのboolに応じてマテリアル色を変更する
        if (blackflg)
        {
            // マテリアル色を黒に変更する
            // マテリアルを複製しないようプロパティブロックを直接操作する
            m_PropertyBlock.SetColor("_Color", Color.black);
            myRenderer.SetPropertyBlock(m_PropertyBlock);
        }
        else
        {
            // マテリアル色を白に変更する
            // マテリアルを複製しないようプロパティブロックを直接操作する
            m_PropertyBlock.SetColor("_Color", Color.white);
            myRenderer.SetPropertyBlock(m_PropertyBlock);
        }
    }
}

f:id:bluebirdofoz:20200217094453j:plain

作成したスクリプトをシーンの Cube オブジェクトにアタッチします。
f:id:bluebirdofoz:20200217094502j:plain

ビルド前にシーンを再生し、パブリックフィールドの値を変更すると Cube の大きさや色が変わることを確認します。
f:id:bluebirdofoz:20200217094514j:plain

プロジェクトのビルドとインストール

以下のページの手順に従って作成したプロジェクトをビルドし、HoloLens にインストールします。
bluebirdofoz.hatenablog.com

更に HoloLens を Unity 起動中の PC と 同じローカルネットワーク空間に接続しておきます。
f:id:bluebirdofoz:20200217094531j:plain

デバッグの実行

HoloLens 側でインストールしたアプリケーションを起動します。
f:id:bluebirdofoz:20200217094541j:plain

HoloLens 側でアプリが起動したら、Unity 側の Remote Debug ウィンドウの[Active Player]のプルダウンを開きます。
一覧に、アプリケーションを起動中の HoloLens のPC名とIPアドレスが表示されるので、これを選択します。
f:id:bluebirdofoz:20200217094552j:plain
一覧に HoloLens が表示されない場合は、PC と HoloLens が同じネットワーク空間に接続されているか、または InternetClientServer の Capability が設定されているか、確認してください。

接続に成功すると、ウィンドウ上に現在起動中のシーンにあるゲームオブジェクトの情報が表示されます。
SampleScene -> Cube を開き、Test Script を開きます。
f:id:bluebirdofoz:20200217094603j:plain

[Scalemag]の設定を 1 から 2 に変更します。
f:id:bluebirdofoz:20200217094613j:plain

同時に HoloLens 上のアプリの設定値が変更され、Cube の倍率が変わり、サイズが2倍になっていれば成功です。
f:id:bluebirdofoz:20200217094622j:plain

bool 値の変更も試してみます。
Unity の画面に戻り、[Blackflg]のチェックボックスにチェックを入れてみます。
f:id:bluebirdofoz:20200217094632j:plain

Cube の色が黒色に変わりました。こちらも成功です。
f:id:bluebirdofoz:20200217094642j:plain

HdgRemoteDebug を利用すると、このようにデバイス上で Unity エディターのようなデバッグが簡単に行えるようになります。
オブジェクトの見た目や UI の微調整の他、デバイス上でしか発生しない不具合のデバッグなどに役立ちそうです。