最近はHoloLensを少し触っています(ホロラボ デコシ id:haikage1755 さん貸してくれてありがとう!)
HoloLensはSpatialMappingによる動的な周囲の形状取得生成が出来るので、こういった「部屋の中を経路探索する」みたいな挙動も簡単に実装出来て素晴らしいです。
サンプルアプリとしてAirTapした場所にキャラクターが移動する物を作ってみました。
GitHub - neon-izm/HololensNavmeshSample
今回はこのサンプルアプリを作る過程で得られたHoloLens開発に関する初歩のTipsを書いていこうと思います。
それにしても2014年にはKinectをOculus Riftの前面にマウントする、みたいな力業で作っていたようなアプリケーションが
2016年のHoloLensだとスタンドアロンで動いてしまってるので、素晴らしい時代ですね。
Unity2017.4.x系はHoloLens開発時にハマり所がなく動く
半年くらい前(Unity2017.2系の頃)の記事情報を見るとHololens開発を行う時はUnityの特定バージョンを指定する物が多かったですが、現在はUnity2017.4系のLTSリリースを使っていれば、後述するMRTKも問題なく動作します。(2018.x系はMRTKのサポートがまだなので、現時点では2017.4系を使うのが良いと思いました)
実質的なHoloLensアプリ開発は殆どUnity+MRTKを使う
MRTK(Mixed Reality Toolkit)はHololensとWindowsMixedRealityHeadSetの便利なコンポーネント集で、Unityパッケージも提供されています。 少し前のUnity+Hololensの開発記事を読んでいるとHoloToolkitという名前を見かけますが、このHoloToolkitが現在ではバージョンアップが進みMRTKと名前も変えています。現在の最新リリースバージョンは2017.4で、これはUnity2017.4系もサポートしています。
https://github.com/Microsoft/MixedRealityToolkit-Unity/releases/tag/2017.4.0.0
AirTap処理やSpatialMapの生成可視化、各種Grabbableなコンポーネントなどがprefab形式でも提供されていて、サンプルシーンの作りも高品質なので、一通りサンプルシーンをコード読んで触るだけでも勉強になります。
HoloLens開発しない、という人もプロジェクト設定切り替えの一発ビルドのGUIをエディタ拡張で実現しているので、試しにMRTKとUnity2017.4でソースを読んでおくとお得な気がします(環境がまずいときに注意書きが表示されたりして作りが良いです) この辺です。 MixedRealityToolkit-Unity/Assets/HoloToolkit/BuildAndDeploy at master · Microsoft/MixedRealityToolkit-Unity · GitHub
リモート実行の仕組みを使って見え方は確認できる
UnityのiOS向け開発をしていると、Unityエディタで実行を確認してからXCodeプロジェクトを吐き出して、XCode上でiOS端末にビルド+実機転送をして挙動を確認します。 HoloLensも同様に、Unityエディタで実行を確認してからVisualStudioプロジェクトを吐き出して、VisualStudio上でHoloLensにビルド+実機転送をして挙動を確認します。
この一連のイテレーションが結構時間が掛かる(10分で済まない)為、ちょっと変更して実機で試す、というのが面倒になってしまいます。
HoloLens開発では実機ビルドとエディタ実行の中間の実行環境としてHolographicRemotingPlayerが用意されています。これは処理自体は開発PC上のCPU+GPUを使い、表示やトラッキングはHoloLensで行う物で、実行も凄く速い(数秒)上にHoloLens上での見え方を確認出来て凄く便利です。
Holographic Remoting Player - Mixed Reality | Microsoft Docs
類似の仕組みは例えばDaydream開発をする時にDaydream Instant Previewとして提供されています。VRやARの開発は実機上での見え方確認が大切なので、こういった簡単にプレビューできるのは素晴らしいです。
Instant Previewを使ってDaydream対応アプリを効率よく開発する方法 - WonderPlanet DEVELOPER BLOG
//ただし、実機では動かない処理が書けて動いてしまう、とかWebCamを取得する処理がHoloLens上のカメラじゃなくてPCに刺さったWebカメラを参照してしまう、とかの罠はあります。実機と完全に同一ではないことに注意が必要そうです。
意外と使えないアセットが多い
Unityの強力なアセットストアで買えるアセット群の内、UWP対応またはManagedDLLまたはC#ソースコード提供されているアセットしか動かないです。(x86,x64,iOS,Android対応でdllや.soが入っているようなネイティブプラグイン提供アセットは大体動かないです)
また、ManagedDLL提供されているアセットでも、UWP上で動かない処理が含まれていると動作しない為、注意が必要です。ファイルIO周りが鬼門です…
最後に
HoloLens向けの開発楽しいです! 発売開始から3年経って、技術情報の蓄積も増えて開発環境もだいぶ整っているので、HoloLensを昔買ってホコリを被っている人も、再入門しやすいタイミングではないかと思いました。