はじめに
HoloLens 2 アプリケーション開発の際に、文字を常にスクリーン内に表示しておきたい場面があるかと思います。例えば、写真を撮影する際のシャッターのカウントダウンやユーザーに確実にメッセージを伝えたい時など、ユーザーの視野の中にコンテンツを表示させ続ける必要があるかと思います。そのような場面で使える Tips をご紹介したいと思います。
実現方法としては、以下2つの方法があるかなと思います。
MRTK Canvas の Render Mode をScreen Space - Overlay
にセットする- MRTK の Orbital コンポーネントを利用する
[補足]
Canvas の 描画モードを Screen Space - Overlay
にすれば、簡単に対応できるかなと思ったのですが、MRTK Canvas では描画モードを World Space にセットする必要があるみたいです。
Canvas 上にテキストを表示するだけなら、MRTK Canvas に変換する必要がなく、Unity 標準の Canvas で対応できるみたいです。詳しくは、MRTK の GitHub Issue - Is there any documentation on how to view a UI/canvas in Hololens 2? をご確認ください。
また、XRデバイスでスクリーンスペースUIをサポートする計画はないみたいです。グラフィック処理に重大な影響を及ぼすため。2022年9月時点の回答なので、その点ご留意ください。
We don't have any plans to support screenspace UI in XR devices, as this isn't supported by Unity themselves and has serious rendering/graphical implications.
検証環境
本記事の検証環境は、以下の通りです。
- Unity 2020.3.48f1
- MRTK v2.8.2
MRTK の Orvital コンポーネントを利用する方法
MRTK Foundation パッケージに含まれている 3DTextSelawikBold.prefab
をドラック&ドロップで ヒエラルキービュー に追加します。
Packages/com.microsoft.mixedreality.toolkit.foundation/SDK/StandardAssets/Prefabs/Text/3DTextSelawikBold.prefab
Add Component ボタンをクリックします。
Orbital コンポーネントを検索して、ゲームオブジェクトにアタッチします。
Orbital コンポーネントがアタッチされると、依存関係のある SolverHandler
も同時にアタッチされます。
Solver (ソルバー) は、定義済みのアルゴリズムに従って、オブジェクトの位置 (Position) と方向 (向き) の計算を行ってくれるコンポーネントです。Solver は3つのスクリプトで構成されます。
スクリプト名 | 説明 |
---|---|
Solver | すべてのソルバーのは派生元である基本抽象クラス。状態の追跡、パラメーターと実装のスムージング、自動的なソルバーシステムの統合、更新順序が提供されています。 |
SolverHandler | 追跡する参照オブジェクトを設定して、ソルバーコンポーネントの収集を処理して、適切な順序でそれらの更新を実行します。 |
Solver 派生クラス | ソルバーの抽象クラスを派生させ、利用シチュエーションごとに実装されたクラス。 |
Solver の派生クラスの種類は10種類あります。それぞれ追従方法が異なるので、コンテンツの利用シーンに応じてこれらの中からお好きな Solver を選択します。今回は、Orbital を使って、ユーザーの頭 (Main Camera) に追従するテキストを作っています。
実際に HoloLens 2 で動かした際の動画です。
以上、ユーザーの頭の動きにオブジェクトを追従させるのご紹介でした。