MRTK3 - Volumetric UIについて
Mixed Reality Toolkit3で使える「Volumetric UI」
Unityで様々なXRコンテンツを作る際のオブジェクトの配置を支援するための機能。
特にメニューなどで効果を発揮し、サイズ計算などをせずにきれいにオブジェクトを並べることができる。この機能はUGUIで構成されているが、MRTK3ではUGUI上で発生するイベントをXRIの方に通知する機能(Canvas Proxy Interactor)があるので、Canvasだからと言って実装が特殊になることがない。また、UGUI対応のボタン部品なども提供されている。
ここが便利
配置がとても楽でかつ、実行時のサイズ調整も簡単にできる。
- 親のサイズを基準に子の要素を自動調整
- 子のサイズを基準に親の要素を自動調整
- 可変サイズに対する設定が可能(最小サイズ)
必要なパッケージ
- com.microsoft.mrtk.uxcomponents: 3.0.0-pre.12
- com.microsoft.mrtk.uxcore: 3.0.0-pre.12
Volumetric UI概要
Volumetric UIの機能はUnityのCanvasのレイアウトに関する機能を利用して実現しています。MRTK3ではこの機能を利用できるようにUX部品を構築することでメニューなどの作成が容易になっています。
種類 | 概要 |
---|---|
レイアウト要素として定義する | Canvas内に配置するオブジェクトのサイズをコントールします。最小サイズや最大サイズを設定することでサイズ変更に柔軟に追従するオブジェクト要素を構成します。 |
水平に並べる - Horizontal Layout Group | 子要素を水平に並べていきます。 |
垂直に並べる - Vertical Layout Group | 子要素を垂直に並べていきます。 |
格子状に並べる - Horizontal Layout Group | 格子状にオブジェクトを配置したい場合に利用します。MRTK3のボタンサイズは32が基本となっているので、ボタンのみを格子状に配置する場合はcell sizeを32にすると隙間なく並べることが可能になっています。 |
Volumetric UIをうまく使うために
MRTK3では現時点ではCanvas対応した以下のUX部品が提供されています。
ボタン系
部品名 | 概要 |
---|---|
Action Button | 押すことでイベントが発生するボタン |
CanvasButtonToggleSwitch | トグル機能がついたボタン |
Empty Button | 空のボタン |
PressableButton_Custom_Cube | 四角形の押しボタン |
PressableButton_Custom_Cylinder | 円形の押しボタン |
部品名 | 概要 |
---|---|
CanvasButtonBar | ボタンを複数グループ化したもの |
CanvasButtonBar_SharedBackplate | ボタンを複数グループ化したもの。背景パネルの境涯がないパターン |
CanvasButtonBar_Toggles | ボタンを複数グループ化したもの。トグル制御が可能 |
部品名 | 概要 |
---|---|
SeeItSayItLabel-Canvas | ボタンなどの操作対象がフォーカスされると表示されるラベル |
スライダー
部品名 | 概要 |
---|---|
CanvasSlider | スライダーUI |
チェックボックス、トグル
部品名 | 概要 |
---|---|
Checkbox | チェックボックス |
ToggleSwitch | トグル制御 |
背景パネル
部品名 | 概要 |
---|---|
UIMenuBackplate_R13 | MRTK3のUIに合わせた背景要素として利用 |
UIPanelBackplate_R16 | MRTK3のUIに合わせた背景要素として利用 |
ダイアログ
部品名 | 概要 |
---|---|
CanvasDialog | ダイアログ |
メニュー系
部品名 | 概要 |
---|---|
HandMenuBase | 手元で使うメニュー部品(多くの情報を表示するためのもの) |
NearMenuBase | 手元で使うメニューの土台(手のひらを返して表示する操作数が少ないもの) |
テキスト入力
部品名 | 概要 |
---|---|
MRTKTMPInputField | テキスト入力フィールド(TextMesh Pro) |
MRTKUGUIInputField | テキスト入力フィールド(UGUI) |
キーボード
部品名 | 概要 |
---|---|
KeyboardPreview | キーボード |
サンプル - サイズ変更可能なボタンが並んだメニューを作ってみる
Unityプロジェクトを作成しMRTK3を導入する
基本的な手順は以下の記事を参考に設定してください。
Volumetric UIのパッケージを導入する
必要なパッケージは以下のものになりますので、Mixed Reality Feature Toolでインポートしてください。
- com.microsoft.mrtk.uxcomponents: 3.0.0-pre.12
- com.microsoft.mrtk.uxcore: 3.0.0-pre.12
親要素を追加する
最初に空オブジェクトを作成して名前を[Menu]としています。さらにその下にからのGameObjectを作成します。
空Canvasを追加する
次にVolumetric UIでデザインするために空のCanvasを追加します。合わせて[Render Mode]を[World Space]に設定します。また、Positionを(0,0,0),Scaleを(0.001,0.001,0.001)に変更します。
BackPlateを仕込む
次に背景にパネルが入るようにBackPlateを入れます。先ほど作った空のPlateに[Canvas Element Rounded Rect]を追加します。
また、Rect Transformも合わせて変更しておきます。
- XY方向にストレッチ
- Positionおよびsizeはすべて0
横に並べる
次に背景パネルを入れたPlateに[Horizontal Layout Group]を追加します。
- [ControlChildSize]のWidth,Heightにチェック
- [ChildForceExpand]のHeightにチェック
Plateの子要素に空のオブジェクトを1つ作成し[Vertial Layout Group]を追加します。
- [ControlChildSize]のWidth,Heightにチェック
- [ChildForceExpand]のHeightにチェック
[Vertial Layout Group]の子要素にActionButtonを複数個追加します。追加するとわかると思いますが、自動的に破綻せずにレイアウトしていくことが可能になっています。[ActionButton]は[Hierarchy]タブ内で右クリックメニューより[Create]-[UI]-[MRTK]-[ActionButton]で追加可能です。
画像領域を追加する
Plateの子要素に空のオブジェクトを1つ作成し[Horizontal Layput Group]を追加します。
- [ControlChildSize]のWidth,Heightにチェック
- [ChildForceExpand]のWidth,Heightにチェック
さらにその下にImageを配置してみます。
メニューのサイズ調整などを可能にする
最後にサイズの変更を実現する手段を紹介します。こういったメニューのサイズを調整するための機能としてMRTK3では[Bounds Control]と[Object Manipulator]を組み合わせることで実現できます。
まず操作用にオブジェクトを追加します。Plate等が入っているCanvasにImageを追加します。追加したImageオブジェクトにさらにBox Coliderを追加してください。Imageオブジェクトを以下の通りに設定します。
- Rect Transform
- Position : (15,0,0)
- Width : 3
- Height : 100
- Anchor : Middle Right
- Box Collider
- Size : (13,110,10)
このImageオブジェクトを左右に作成します。
最後にMenuオブジェクトに[Bounds Control]及び、[Object Manipulator]を追加します。以下の設定のみ変更してください。
- Bounds Control
- [Bounds Visuals Prefab] に [BoundingBoxWithHandles]を設定
- Flatten ModeをAlwaysに
上記の設定で実行すると、ホールド操作でメニューの移動、ダブルタップでサイズが変更可能になります。
参考リンク
- Github - Mixed Reality Toolkit 3
- MTRK3ドキュメント
- MRTK3 Tutorial : "Zappy's Playground"
- Mixed Reality Dev Days 2022
- 再生リスト(Youtube)
-
Introducing MRTK3 – Shaping the future of the MR Developer Experience.
→過去のMRTKの取組みから振返り、MRTK3がどういったコンセプトで今回作られたのか -
Getting started with your first MRTK3 project
→MRTK3動かしてみようぜ -
MRTK3 Interaction building blocks
→MRTK3の入力系についての設計や構造 -
Building Rich UI for MR in MRTK3
→MRTK3の素敵なUIをどう構築しているか -
Working with Dynamic Data and Theming in MRTK3
→データバインディングとテーマ制御について -
Deploy Everywhere with OpenXR and MRTK3
→MRTK3のOpenXR対応で色々デバイスで動く話
Discussion