HoloLens用 Managed Pluginを実機デバッグする

投稿者: | 2017-08-04

ご無沙汰しております。7月は別件の作業がありブログが書けていなかったのですが、8月からはこれまで通り投稿していきたいと思います。今回はリハビリというわけではないのですが、Tips的な内容になります。

最近はUWP系のAPIを使って開発することがあるのですが、コード量が多くなってくるとプリプロセッサで分岐を書くのがつらくなるので、プラグイン化しています。しかし、プラグイン化すると実機デバッグがひと手間必要になってきますので、今回はHoloLens実機でマネージプラグイン部分のコードをデバッグする方法をまとめたいと思います。

なお、マネージプラグインの作り方についてはsatoshi-maemotoさんの記事を参考にするのをおススメします。

使用している環境はUnity 2017.1.0f3とVisual Studio 2017です。

用意するプラグイン

今回はサンプルとして次のようなソリューションを用意しました。

・SharedCode
プラグインのソースコードが入った共有プロジェクト。整数の2を返すだけのメソッドを保持するクラス。
・PluginUnity
UnityEditorからの参照やPlay Mode実行時に使用されるDLLのプロジェクト。ソースは共有プロジェクトを参照している。
・PluginUWP
UWP(HoloLens実機で動作する状態のアプリ)の実行時に使用されるDLLのプロジェクト。ソースはこちらも共有プロジェクトを参照している。

これらのソリューションをDebugモードでビルドします。すると、DLLファイルとpdb(デバッグシンボル)ファイルが出来上がります。

Unity側での設定

Assets/Plugins配下にUnityEditor用のDLL(PluginUnityでビルドしたDLL)とpdbファイルを配置し、以下の通り設定します。

SamplePlugin.dll.mdbファイルはUnity側で自動的に作成されます。

続いてAssets/Plugins/WSAにUWP用のDLL(PluginUWPでビルドしたDLL)とpdbファイルを配置し、以下の通り設定します。

今回はUWPのAPIを使用していないので、SDKの項目は「Any SDK」を指定していますが、UWPのAPIを使う場合は「UWP」を指定してください。

プラグインの設定は以上です。

なお、今回はテスト用のスクリプトとして、下記のものを用意しました。

using UnityEngine;

public class CalcTest : MonoBehaviour {

    // Use this for initialization
    void Start () {
        var calc = new SamplePlugin.Calc();
        var num = calc.ReturnTwo();
        Debug.Log(num);
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}

ここまで完了したら、おなじみの手順でビルドします。

HoloLens実機でデバッグする

ビルドしたソリューションを展開します。そして「ファイル」⇒「開く」⇒「ファイル」から、デバッグしたいプラグインのソースコードを開きます。ソースコードを開いたら、デバッグしたい箇所にブレークポイントを設置します。

そしてDebugモードでプラットフォームはx86、ターゲットをDeviceに指定して「デバッグ」⇒「デバッグの開始」を選択すると、アプリがHoloLensに配置されそのまま起動します。アプリ起動後はプロセスがブレークポイントで指定したところで中断されますので、デバッグが可能となります。

[おまけ]UnityEditor上でプラグインをデバッグする

いちいち実機にビルドするのが面倒だ、Remoting Playerでデバッグしたいという場合は、UnityEditorからVisualStudioを開き前説と同じ手順でブレークポイントを設置します。そして「Unityにアタッチ」を選択してUnityEditorからPlay Modeを立ち上げれば同様にデバッグが可能となります。

ただし、ここで動作するのは.NET4.6のコードでUWP系のAPIは動作しないので注意してください。

まとめ

HoloLens用Manage Pluginを実機デバッグする方法をまとめました。

ブログネタはだいぶ貯まっているのでどんどん放出していきたいと思います。