Home » 【XR Kaigi 2021】逆引きで解説!Unityで作るHoloLens 2向けアプリ


セミナー 2021.12.21

【XR Kaigi 2021】逆引きで解説!Unityで作るHoloLens 2向けアプリ

国内最大級のVR/AR/MRカンファレンス「XR Kaigi」が今年も開催されました。今年の「XR Kaigi 2021」はオンラインカンファレンス「XR Kaigi Online」(11月15日~17日)と、リアル会場での展示・体験会「XR Matsuri」(11月25日・26日)のハイブリッドで実施。XR Kaigi Onlineでは、3日間の期間中に50以上のセッションが行われました。

今回はその中から、11月15日に行われたユニティ・テクノロジーズ・ジャパンのセッション「理解して開発! HoloLens 2 アプリ開発 2021」をレポートします。登壇者はユニティ・テクノロジーズ・ジャパンの高橋忍氏。セッションでは、Unityを使ったHoloLens 2向けアプリケーションの開発方法が逆引き形式で解説されました。

Unityでの開発環境構築手順

セッションはまず、UnityでHoloLens 2のアプリケーションを開発するために必要な環境構築の解説から。

UnityでHoloLens 2のアプリケーションを開発するには、HoloLens 2とWindows 10/11が必要です。また、HoloLens 2、Windows 10/11とも開発者モードを有効にする必要があります。HoloLens 2のアプリケーションはUWPアプリ(Universal Windows Platform Applications)で、開発者モードを有効にしないとインストールやデバッグ実行ができない仕様になっているためです。

さらに、UWPアプリを作るためにはMicrosoft Visual Studioも必須。また、UnityにはUniversal Windows Platform Build SupportとWindows Build Support(IL2CPP)を、Visual StudioにはWindows 10 SDK(Windows10アプリケーション開発用)・USBデバイス接続(リモートデバッグ用)・C++(v142)ユニバーサル Windows プラットフォームツール(C++の開発用)の3点を導入する必要があります。

HoloLens2用のUnityプロジェクトの構築

環境の構築が済んだところで、続いてはHoloLens 2用のUnityプロジェクトの構築手順の開設へ。手順は大きく分けて以下の4つです。

1:Unityで新規プロジェクト作成

Unity Hubから通常の手順でUnityの新規3Dプロジェクトを作成します。

2:MRTKと関連Packageの追加

手順1で作成した空のプロジェクトにMRTK(Mixed Reality Toolkit)とその他の関係パッケージをインストールします。現在はMixed Reality Feature Toolというインストーラーを使用してセットアップするのが基本の流れになっています。

Mixed Reality Feature Toolからは、Mixed Reality Toolkit Foundation、Mixed Reality Toolkit Standard Asset、Mixed Reality Toolkit Tools(コントロールなどを作るのに便利)、Platform SupportからはMixed Reality Open XR Plugin(デバイスドライバ)、計4つのパッケージをまずはインストールします。

次に、パッケージを追加したUnity ProjectのSceneをHoloLens 2用に設定します。

メニューの「Mixed Reality」タブからたどり、以下の3つの設定を実行します。

Toolkit> Add to Scene and Configure..
Project > Add Recommended Project Setting for HoloLens 2
Project > Add Recommended Scene Setting for HoloLens 2

この3つを実行することで、HoloLens 2用の設定になります。

3:Open XR Pluginの設定

Project Settings内の「Windows」タブにある「OpenXR」にチェックを入れ、その下にある「Microsoft Hololens feature group」にもチェックを入れます。すると黄色い三角の警告マークが出るのでそれを押し、その後出現するFix Allボタンを押せば自動的に修正が行われます。

念のため、同じOpenXRの設定タブの下のほうにある「Micrsoft Hand Interaciton Profile」が設定されているかも確認しておきます。

4:Projectの残設定

ここでは2つの設定を行います。

まずは、Project Settings > Player Settings > Player > Other Settings > Configuration > Active Input Handlingと進み、「Both」を選択します。

UnityではInput System Package(New)という新しいシステムが標準になってきていますが、HoloLens 2のMRTKでは旧来のInput Manager(Old)を使用しています。Unity上でデバッグを行いつつHoloLens 2上でも動作できるようにするには、両方を有効にする必要があります。なお、ここの設定が間違っている場合、アプリ実行時に大量のエラーが出ることがあるため、そのような現象に遭遇した場合はまずこの項目を確認するとよいでしょう。

次に、Project Settings > Player Settings > Player >  Publisher Settings > Package nameと進み、アプリ名を変更します。アプリ名がデフォルトのままだと、HoloLens 2に同じ名前でアプリが転送されてしまうことになります。

動作確認

ここまで設定できたら、一度再生ボタンを押します。画面内でHoloLens 2用のプロファイラが起動すればOKです。

逆引きで解説するHoloLens 2の基本動作

開発環境の構築が終わったところで、HoloLens 2のさまざまな動作の実装方法を逆引き形式で解説するパートへ。

解説されたのは「物をつかむ・動かす」「物に触れる」「床に置く」「コントロールの活用」「音声操作」「ToolTips」の6つ。アプリケーションに実装したい機能があらかじめ決まっている場合には、この逆引き解説が役に立つはずです。

物を掴む・動かす

まず、動かしたいオブジェクトにObjectManupilatorというコンポーネントを追加します(プレイヤーにではないことに注意)。すると手から線が伸びて対象物を動かせるようになります。

手から線を伸ばして操作するのではなく、直接つかむためには、先ほどのオブジェクトにNearInteractionGrabbableというコンポーネントを追加します。この際、ObjectManipulatorと両方必要な点に注意が必要です。

Unity上のデバッグ実行でハンドトラッキングの操作をする場合、左Shiftキー+マウス操作で左手の移動、Spaceキー+マウス操作で右手の移動、Ctrlキーと組み合わせることで手の回転が行えます。

ObjectManipulatorにはさまざまなオプションがあります。例えばTwo hand Manipulationの設定では、オブジェクトの両手操作/片手操作を変更できます。また、Constraintsを設定することで、例えばオブジェクトの拡大・縮小ができないようにすることも可能です。高橋氏によれば、実物大スケールのオブジェクトは拡大・縮小をオフにするだけでリアリティがかなり増すとのこと。

他にも、BoundsControlを使うことでBounding Boxを表示し、オブジェクトの拡大・縮小の操作をしやすくすることができます。ただし、見た目があまりよくないため、拡大・縮小を行うときのみ表示するのがオススメです(後述の「コントロールの活用」でボタンとの連携などを解説)。

物に触れる

続いては、「物をつかむ・動かす」動作とは別に、オブジェクトにタッチすることでトリガーを発生させ、何か操作を行えるようにする方法の解説です。

NearInteractionTouchableをオブジェクトに追加することで、オブジェクトをつかんだり触ることでイベントを発生させられるようになります。

この際、Event to Receiveに「Pointer」をセットした場合は「オブジェクトを指し示すとイベント発生」、「Touch」をセットした場合は「オブジェクトに触れるとイベント発生」となります。これにObjectManipulatorを組み合わせることで、ObjectManipulator側にあるManupulate Startedに設定したイベントを実行することが可能です。


(セッションでは「中空にあるオブジェクトにタッチすると重力が発生して床に落ちる」というデモが行われた)

床に置く

次はオブジェクトを床に置く方法です。オブジェクトを床に置くためには、「壁や床などの空間を認識する」「認識した壁や床にオブジェクトを置く」という2つの設定が必要です。

HoloLens 2では、Spatial Awarenessを使うことで空間を認識できるようになります。Spatial AwarenessはMRTKの標準機能ですが、デフォルトではオフになっているだけでなく、MRTK自体がRead Onlyになっているため変更できません。

そこで、まずはMixed Reality ToolkitをCloneし、そのCloneの中のSpatial Awarenessを「Enable」に変更するという手順を踏む必要があります。

Spatial Awarenessが有効化された状態でHoloLens 2上でアプリを立ち上げると、認識している空間メッシュのワイヤーフレームが表示されます。なお、表示されているワイヤーフレームを消すには、Spatial Awareness一度Cloneしてから(MRTK同様、Spatial AwarenessもRead Onlyになっているため)、Display SettingsのDisplay Optionを「Occulusion」(または「None」)に変更する必要があります。

空間認識のセッティングが済んだら、認識した空間にオブジェクトを設置します。

まず、設置したいオブジェクトにObject Manipulatorコンポーネントを追加し、次にTap To Placeコンポーネントを追加します(同時にSolver Handlerも追加される)。Solver Handlerでは、Tracked Target Typeを変更することで「頭の向いている場所にオブジェクトを置く」「コントローラで指し示した位置に置く」などの操作方法を指定することができます。

Tap To Place内のMagnetic Surfaceでは、オブジェクトを認識した床や壁、あるいは別のオブジェクトに空間に貼り付くように配置するかどうかを設定できます。また、Keep Orientation Verticalを有効にすると、設置中はオブジェクトが常に水平状態を保つようになります。

コントロールの活用

ボタンなど、UnityにはないコントロールUIはMRTK側で用意されています。メニューのMixed Reality > ToolKit > Toolboxの中から使いたい物を選ぶだけで、Scene上に追加されます。

それぞれのボタンの設定は、追加されたボタンコンポーネントのInspector下部に現れるButton Config Helperで変更可能。ラベル付けや発生するイベントの設定、アイコンの変更など、ボタンに求められる主要な設定をまとめて行うことができます。


(ボタンを使い、タッチするとバウンディングボックスが表示されるようにした例)

また、Near Menuを利用することで、ユーザーに追従して動くメニューを実装可能。メニューのMixed RealityタブからToolKit > Toolboxと進んでNear Menuを追加し、その中にあるRadial Viewコンポーネントを「Enable」にすることでユーザーの体に追従するようになります。

さらに、Solver Handler のTracked Target Typeを「ヘッド」に、座標をY=-0.45、Z=0にすることで、ユーザーのだいたい胸の前にメニューが追従するようになります(X=0、Y=0、 Z=0は頭の位置)。

音声操作

MRTKを使えば音声操作も簡単に実装できます。セッションでは音声操作の具体的な実装方法が紹介されました。音声操作はMRTKでは入力(Input)のカテゴリになります。

Spatial Awarenessと同様、まずはMRTKをCloneし、ImputSystemProfileをClone。さらにImputSystemProfileの中にあるSpeechProfileをCloneすることで音声操作の設定が変更可能になります。

続けて、+Add a New Speech Commandにキーワードを登録することで、登録したキーワードを認識してイベントを発生させられるようになります(HoloLens 2のOSが日本語設定であれば、漢字・カタカナ混じりの日本語キーワードでもOK)。

キーワードで発生したイベントを受けて動作させるには、イベント発生対象となるオブジェクトにSpeechInputHandlerコンポーネントを追加し、キーワードの追加とレスポンスイベントを設定すればOKです。

ToolTips

最後に解説されたのはToolTips。ToolTipSpoonerの機能を使うことで、オブジェクトを選択したときだけToolTipを表示させる方法が紹介されました。注意点はColliderが必須なことと、どのタイプのToolTipを表示するのかを設定しておく必要があることです。

まとめ

最後にまとめとして高橋氏は「MRTKとUnityを使うことで、簡単にHoloLens 2用のアプリ開発ができます。まずはお手元のCADデータを取り込んで表示するなど、簡単なところからやってみてください」と語り、セッションは終了となりました。


VR/AR/VTuber専門メディア「Mogura」が今注目するキーワード