本日は HoloLens の調査枠です。
Hdg Remote Debugを利用してHoloLensにデプロイしたアプリケーションをデバッグする方法を記事にします。
Hdg Remote Debugとは
Hdg Remote DebugはUnityのライブアップデートおよびデバッグツールです。
デバイスにデプロイされた後に、シーンのゲームオブジェクト、コンポーネント、シリアル化されたフィールドを検査できます。
Unityエディター上で、ライブビルドのフィールドを調整できます。
UIレイアウトやタッチコントロールなどの設定変更をすばやく繰り返すのに最適です。
Unityがサポートするほぼ全てのプレーヤープラットフォームでビルドをデバッグできます。
Tokyo HoloLens ミートアップ vol.19 の石山氏セッションで紹介され、興味を持ったので購入して試してみました。
docs.google.com
シーンの作成
以下のページの手順に従って HoloLens 用の Unity プロジェクトとシーンを作成します。
bluebirdofoz.hatenablog.com
Hdg Remote Debugのインポート
[Asset Store]ウィンドウで Hdg Remote Debug のページを開き、[Import]を行います。
Hdg Remote Debug を[Import]すると、Plugins/HdgRemoteDebug ディレクトリが作成されます。
メニューには Window -> HdgRemoteDebug が追加されています。
これをクリックすると、リモートデバイスをデバッグするための RemoteDebug ウィンドウが開きます。
サーバーの設定
Plugins/HdgRemoteDebug 配下の RemoteDebugServer.prefab をシーンに追加します。
RemoteDebugServer は Unity と通信するサーバーの役割を果たします。
次に通信にはネットワークを利用するため、InternetClientServer の Capability を有効にしておく必要があります。
メニューから Edit -> Project Settings を開きます。
Publishing Settings内の Capabilities から[InternetClientServer]にチェックを入れます。
これで HdgRemoteDebug を使ってリモートデバイスをデバッグする準備が整いました。
デバッグ用スクリプトの作成
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); } } }
作成したスクリプトをシーンの Cube オブジェクトにアタッチします。
ビルド前にシーンを再生し、パブリックフィールドの値を変更すると Cube の大きさや色が変わることを確認します。
プロジェクトのビルドとインストール
以下のページの手順に従って作成したプロジェクトをビルドし、HoloLens にインストールします。
bluebirdofoz.hatenablog.com
更に HoloLens を Unity 起動中の PC と 同じローカルネットワーク空間に接続しておきます。
デバッグの実行
HoloLens 側でインストールしたアプリケーションを起動します。
HoloLens 側でアプリが起動したら、Unity 側の Remote Debug ウィンドウの[Active Player]のプルダウンを開きます。
一覧に、アプリケーションを起動中の HoloLens のPC名とIPアドレスが表示されるので、これを選択します。
一覧に HoloLens が表示されない場合は、PC と HoloLens が同じネットワーク空間に接続されているか、または InternetClientServer の Capability が設定されているか、確認してください。
接続に成功すると、ウィンドウ上に現在起動中のシーンにあるゲームオブジェクトの情報が表示されます。
SampleScene -> Cube を開き、Test Script を開きます。
[Scalemag]の設定を 1 から 2 に変更します。
同時に HoloLens 上のアプリの設定値が変更され、Cube の倍率が変わり、サイズが2倍になっていれば成功です。
bool 値の変更も試してみます。
Unity の画面に戻り、[Blackflg]のチェックボックスにチェックを入れてみます。
Cube の色が黒色に変わりました。こちらも成功です。
HdgRemoteDebug を利用すると、このようにデバイス上で Unity エディターのようなデバッグが簡単に行えるようになります。
オブジェクトの見た目や UI の微調整の他、デバイス上でしか発生しない不具合のデバッグなどに役立ちそうです。