本日はMRTK3枠です。
今回はBoundsControllExamplesシーンを見ていきます。
〇BoundsControllExamples
BoundsControllExamplesシーンはUIUXにかかわるサンプルシーンです。

Boundsとは領域という意味で、このサンプルシーンではオブジェクトを操作する際の領域を可視化するサンプルです。
xRアプリケーションでは右目、左目の描画の差によってオブジェクトの距離感をユーザーに伝えていますが、ユーザーによってオブジェクトの距離感を見失うことや精密なオブジェクトの位置を認識することが困難な場合があります。
特にオブジェクトの移動に関しては、難しいと感じる人が多いです。
こういった場合にわかりやすい可視化や制限によってオブジェクトの操作性を上げるのがBoundsControllの役割になります。
もう少し具体的に説明するとハンドルと呼ばれる概念をオブジェクトに付与し、ハンドルを操作することでより直感的にオブジェクトを操作できるようにするサンプルシーンになります、
このシーンでは5つのオブジェクトの例があります、

これらはBoundsControllというゲームオブジェクトの子オブジェクトとして配置されています。

〇Flatted Style
Flatted Styleは平面のQuadの例です。 これは例えば説明文や写真など空間中に浮かぶ操作可能な2Dスタイルの実装に最適です。

このサンプルは実行時にクリック(実機の場合はAirTap)を行うことでBoundingBoxが現れ、ハンドルをつかむことで拡大縮小ができます。

親オブジェクトであるFlatPlaneオブジェクトのは次のようなコンポーネントがアタッチされています。
それぞれの説明は次のようになります。
| コンポーネント名 | 説明 | 備考 |
|---|---|---|
| AudioSource | ||
| Object Manipulator | オブジェクトの操作を行うコンポーネント | |
| ConstraintManager | オブジェクトの移動などで軸制限を行うコンポーネント | |
| BoundsControll | ||
| UX Bounding Configurator | ||
| MinMaxScaleConstraint | BoundsControllのスケールの最大最小値を制限 | |
| UGUI Input Adapter Draggable | UGUIのイベントをXRInteractionToolkit関連のコンポーネントとつなぐクラス | UGUIInputAdapterの拡張クラス |
・UGUI Input Adapter Druggable

ここで注目すべきはBoundControllです。

このコンポーネントがBoundsの管理を行っています。
〇ハンドル
クリックした際に表示されるハンドルはBoundsのBouncs Cisuals Prefabにアタッチしたプレファブに由来しています。

デフォルトではMRTKで提供されているBoundingBoxWithHandlesプレファブが使用されています。

ハンドルのプレファブ内の角パーツではScale Handle Interactableコンポーネントがアタッチされており、これはスケール調整に使用されるBoundsHandleInteractableクラスを継承したクラスになります。

BoundsHandleInteractableクラスは角以外のハンドルにアタッチされているクラスです。

Advanced Statefullnteractable SettingsのHandle Typeを変更することで別のハンドルタイプとしても使用できます。

〇クリックした際に起動する処理
ManipulationのHandles Activeのチェックボックスを外すとハンドルの表示がなくなり、チェックボックス=Bool値がTrueの場合ハンドルが起動します。

クリックによってこのBool値をTrueに変えているのがToggle Handles On Clickです。

private void OnHostDeselected(SelectExitEventArgs args)
{
if (!hasPassedToggleThreshold && toggleHandlesOnClick)
{
HandlesActive = !HandlesActive;
}
hasPassedToggleThreshold = false;
isHostSelected = false;
}
本日は軽く触っていきました。
次回以降で別の処理や実装についても見ていきます。