#UWPのライブラリを使った時のUnityのデバッグ
UWPのライブラリを利用してUnityのアプリを作った場合、動作確認するためにはUWP側までビルドして実行しない限り動作してるのかがわからない状況になります。
私自身がUnityに慣れていないので、Unity上での動きを確認するためにデバッグしたいことがあります。ですがUWP側と連携しておりかつ、データをUWP側からデータもらう仕様の場合、確認が難しくなる状況になりました。
今回、そのあたり解決する方法を紹介したいと思います。と言ってもよくあるスタブを利用する一般的な方法です。Unity側でデバッグ中はスタブ利用して、実際のアプリではちゃんとしたクラスを利用できるようにする形で、主に自分の備忘録として残しています。
環境
今回使用した環境は以下の通りです。
Visual Studio 2015 Community Edition update 3
Unity 5.5.0P2 Personal
UWP側のライブラリを使う方法
前回Unity側でUWPのライブラリを使う方法を整理したのですが、少し見直しました。
前回作ったものはUnity自体をあまり使ったことがなかったため管理クラスをmonobehaviourと空のオブジェクトでわざわざPrefabつくっていました。
でも本当はそんなことしなくても普通にStaticクラス作ればよかったということを知りました。
修正時にインターフェース周りも変更していますが、概念は全く同じものを作っています。
修正版のソースコードはgithubに公開しています。
https://github.com/TakahiroMiyaura/UWPBridgeSamples
やり方
簡単で#ifディレクティブとスタブクラスを用意すれば解決します。
今回作っているUWP側のライブラリを利用する方法については、IUWPBridgeServiceインターフェースを実装したサービス適用クラスを実装するつくりにしています。
ですのでこのインターフェースを実装したスタブクラスをUnity側に実装し、Unityのエディタ上ではスタブクラスをサービスとして取得するようにするだけです。
以下のように「#if UNITY_EDITOR」で振り分けるだけです。
最終的にUWPアプリケーションとして動作する際にはelse側のロジックで動作するので、一度このような形で実装しておけば少しだけデバッグが楽になるかもです。
特に分業する際にUnity側が得意な人と、UWPでモジュール作る人を分けたりなどもやりやすくなると思います。
// Copyright(c) 2017 Takahiro Miyaura
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
private void Update()
{
if (Service == null)
{
#if UNITY_EDITOR
// For Debug.when this application execute by unity,call this.
Service = new SampleStub();
#else
// execute For HoloLens.
Service = UWPBridgeServiceManager.Instance.GetService<ISampleService>();
#endif
Service.OnDetected = SetFaceObject;
}
Service.DetectFace();
}