MRが楽しい

MRやVRについて学習したことを書き残す

MRTK v2.4.0を使ってHoloLens2のHelloWorldアプリを作成する その2

本日は MRTK v2 の技術調査枠です。
本記事では MRTK の機能を使って Unity で HoloLens2 の HelloWorld アプリを作成するまでの手順を記事にします。
f:id:bluebirdofoz:20200604221526j:plain

その2は MRTK を使ってアプリシーンを作成します。

前提条件

前回記事の続きになります。
bluebirdofoz.hatenablog.com

シーンの作成

テキストオブジェクトの追加

最初に「ハローワールド」を表示するためのテキストオブジェクトをシーンに追加します。
Assets フォルダの以下のフォルダを開くか、「LabelOnlyTooltip」を検索します。
・Assets/MRTK/SDK/Features/UX/Prefabs/Tooltips
f:id:bluebirdofoz:20200604221554j:plain

LabelOnlyTooltip.prefab を選択して Hierarchy の中にドラッグします。
これでシーンに LabelOnlyTooltip オブジェクトが配置されます。
f:id:bluebirdofoz:20200604221606j:plain

TextMeshProがインポートされていない場合、[TMP Importer]ダイアログが開きます。
MRTK はテキストの表示に TextMeshPro を利用するため、これをインポートしておく必要があります。
[Import TMP Essentials]をクリックします。
f:id:bluebirdofoz:20200604221619j:plain

続けて[Import TMP Examples & Extras]をクリックします。
f:id:bluebirdofoz:20200604221639j:plain

これでTextMeshProがインポートされて文字列が表示できるようになります。

テキストオブジェクトの移動

[Scene]画面を確認すると、LabelOnlyTooltip オブジェクトがカメラの位置(X:0,Y:0,Z:0)に配置されていることが分かります。
HoloLens2 ではカメラ位置が頭の位置になります。
f:id:bluebirdofoz:20200604221652j:plain

このままだとアプリを起動したときにテキストが見えないので、テキストをカメラの少し先の正面に移動します。
因みに[再生]ボタンをクリックすると、アプリの動作確認が行えます。このとき、カメラから見た視点を確認することができます。
f:id:bluebirdofoz:20200604221709j:plain

LabelOnlyTooltip オブジェクトを選択して[Inspector]ビューを開きます。
[Transform]コンポーネントの[Position]項目でテキストの位置を調整します。単位はメートル単位になります。
以下の通り、1メートル先の50センチ下辺りに移動しました。

Position X:0(m), Y:-0.5(m), Z:1(m)

f:id:bluebirdofoz:20200604221727j:plain

表示文字列の変更

次に表示文字列を変更します。
LabelOnlyTooltip オブジェクトを選択して[Inspector]ビューを開きます。
[Tooltip]コンポーネントの[ToolTipText]の項目に表示したい文字列を入力します。
f:id:bluebirdofoz:20200604221740j:plain

日本語の表示(オプション)

TextMeshPro で使用しているフォントアセットは日本語に対応していません。
このため、日本語の文字列を[ToolTipText]の欄に入力すると、正常に文字が表示されません。
f:id:bluebirdofoz:20200604221755j:plain

日本語の文字列を利用したい場合は以下の記事を参考に、日本語が利用可能なフォントアセットを作成してください。
bluebirdofoz.hatenablog.com

フォントアセットを作成したら、LabelOnlyTooltip オブジェクトの階層を開き、以下の Label オブジェクトを選択します。
・LabelOnlyTooltip/Pivot/ContentParent/Label
f:id:bluebirdofoz:20200604221814j:plain

[Inspector]ビューを開き、[TextMeshPro]コンポーネントの[Font Asset]に作成したフォントアセットをドラッグします。
f:id:bluebirdofoz:20200604221829j:plain

これで日本語の文字列で「ハローワールド」が表示できました。
f:id:bluebirdofoz:20200604221839j:plain

グラブ(掴み)機能の設定

ここでは更にテキストオブジェクトを掴む機能を追加してみます。
オブジェクトを掴むには以下の3つのコンポーネントの設定が必要になります。

ObjectManipulator        :オブジェクトを操作するためのコンポーネント
NearInteraction Grabbable:オブジェクトを掴むためのコンポーネント
XXX Collider             :オブジェクトのアタリ判定(Box Collider, Mesh Collider など)

LabelOnlyTooltip オブジェクトを選択して[Inspector]ビュー下部の[Add Component]を開きます。
f:id:bluebirdofoz:20200604221854j:plain

[ObjectManipulator]を検索して、コンポーネントを選択します。
f:id:bluebirdofoz:20200604221906j:plain

これで[ObjectManipulator]コンポーネントが追加されました。
次に[NearInteraction Grabbable]を検索して選択します。
f:id:bluebirdofoz:20200604221917j:plain

[NearInteraction Grabbable]コンポーネントが追加されました。
最後に[Box Collider]を検索して選択します。
f:id:bluebirdofoz:20200604222006j:plain

[Box Collider]コンポーネントが追加されました。
これで LabelOnlyTooltip オブジェクトに3つのコンポーネントを設定できました。
f:id:bluebirdofoz:20200604222018j:plain

Collider によるアタリ判定は見た目に合わせて設定する必要があります。
[Box Collider]コンポーネントの[Center],[Size]項目を以下の通り、設定しました。

Center X:0,   Y:0.25, Z:0
Size   X:0.4, Y:0.1,  Z:0.02

f:id:bluebirdofoz:20200604222034j:plain

緑の枠線がアタリ判定になります。
掴みやすいよう厚みなどを幾らか大きめの形状にしています。

Billboard機能の無効化

LabelOnlyTooltip オブジェクトを掴んで回転させたい場合は Billboard の機能を無効化しておく必要があります。
オブジェクトの階層を開き、以下の ContentParent オブジェクトを選択します。
・LabelOnlyTooltip/Pivot/ContentParent
f:id:bluebirdofoz:20200604222047j:plain

[Inspector]ビューを開き、[Billboard]コンポーネントのチェックを外して機能を無効化します。
f:id:bluebirdofoz:20200604222101j:plain

[Billboard]はオブジェクトを常にカメラの方向へ向ける MRTK のコンポーネントです。
これが有効の場合、オブジェクトが必ずカメラ方向を向くため、オブジェクトを掴んでも回転できなくなります。

診断ツールの無効化(オプション)

デフォルトのコンフィグレーション設定を利用していると、アプリの動作時に負荷を計測する診断ツールが常に表示されます。
f:id:bluebirdofoz:20200604223246j:plain

この診断ツールを非表示にしたいという場合は、以下のどちらかの方法を試してみてください。
表示したままで良い場合は、本項目の作業は不要です。

ToggleFeaturesPanelによる無効化

こちらはアプリ内に診断ツールの表示切替のボタンを配置する方法です。
Assets フォルダの以下のフォルダを開くか、「ToggleFeaturesPanel」を検索します。
・Assets/MRTK/SDK/Features/UX/Prefabs/Panels
f:id:bluebirdofoz:20200604222116j:plain

ToggleFeaturesPanel.prefab を選択して Hierarchy の中にドラッグします。
これでシーンに ToggleFeaturesPanel オブジェクトが配置されます。
f:id:bluebirdofoz:20200604222128j:plain

ToggleFeaturesPanel オブジェクトを選択して[Inspector]ビューを開きます。
[Transform]コンポーネントの[Position]項目でパネルの位置を調整します。
以下の通り、50センチ先の20センチ下辺りに移動しました。

Position X:0(m), Y:-0.2(m), Z:0.5(m)

f:id:bluebirdofoz:20200604222142j:plain

アプリを実行中にパネルの左端の[Profiler]ボタンを押すことで診断ツールの表示を切り替えできます。
ToggleFeaturesPanel は診断ツールの切り替えのほか、ハンドメッシュの切り替えやジェスチャーの記録機能なども提供します。
f:id:bluebirdofoz:20200604222156j:plain

コンフィグレーションファイルの変更による無効化

こちらはアプリ内にボタンを追加することなく、診断ツールの表示のみを消す方法です。
診断ツールをデフォルトで非表示にしたい場合はコンフィグレーションファイルをカスタマイズする必要があります。
f:id:bluebirdofoz:20200604223431j:plain

MixedRealityToolkit オブジェクトを選択して[Inspector]ビューを開きます。
デフォルトのコンフィグレーションはカスタマイズできないので[Copy & Customize]をクリックして複製を行います。
f:id:bluebirdofoz:20200604222342j:plain

[Clone Profile]ダイアログが開きます。
作成するコンフィグレーションの名前を[Profile Name]に入力して[Clone]をクリックします。
f:id:bluebirdofoz:20200604222353j:plain

これでカスタマイズ可能なコンフィグレーションが生成されました。
f:id:bluebirdofoz:20200604222405j:plain

コンフィグレーションの[Diagnostics]タブを開き、[Enable Diagnostics System]のチェックを外します。
これで診断ツールが無効化されます。
f:id:bluebirdofoz:20200604222417j:plain

シーンの確認

[再生]ボタンをクリックしてアプリの動作確認を行います。
テキストオブジェクトが見えているか掴む動作が可能か確認します。
f:id:bluebirdofoz:20200604222428j:plain

シミュレーションの詳しい操作方法は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

これでシーンの作成は完了です。
次はアプリケーションのビルドとインストールです。
bluebirdofoz.hatenablog.com