BoundsControl — MRTK3
BoundsControl は、回転とスケールの操作アフォーダンスと共に、自動的にサイズ設定された境界ボックスを提供します。
MRTK 2.x では、BoundsControl は主に、構成 ScriptableObjects を使用してランタイムによって生成されました。 MRTK3 では、BoundsControl のセットアップとカスタマイズが大幅に簡略化されました。 境界ビジュアルとハンドルは、BoundsControl が実行時にインスタンス化するカスタマイズ可能なプレハブです。 開発者は、ビジュアルプレハブを微調整してカスタマイズしたり、新しい境界ビジュアルをゼロから構築したりできます。 新しいMixed Realityデザイン言語に従って、標準の境界ビジュアルの実装を提供します。
新しいビジュアルは、ユーザーの意図とオブジェクトの操作を最小限の視覚的ノイズで示す、合理化された視覚的フィードバックを提供します。
セットアップ
既存のオブジェクトに BoundsControl を追加し、使用する境界ビジュアルを参照に設定 BoundsVisualsPrefab
するだけです。 使用できるいくつかの異なる事前構築済みの境界ビジュアルが用意されています。
重要
ユーザーがオブジェクトを使用できないサイズまたは大きいサイズにスケーリングできないように、開発者は MinMaxScaleConstraint を追加することを強くお勧めします。
境界ビジュアルの意図とフォーカス効果を使用するには、オブジェクトに対する効果が StatefulInteractable
必要です。 対話可能な機能が自動的に検出されない場合は、BoundsControl インスペクターで接続を指定できます。
注意
開発者は BoundsControl と共に ObjectManipulator を使用 して、アフォーダンス ベースの操作に加えてユーザーに直接操作を提供することをお勧めします。 ObjectManipulator は、境界ビジュアルが応答するホバー/フォーカス状態の役割を果た StatefulInteractable
すことができます。
境界ビジュアルプレハブ
BoundsControl で使用するための事前構築済みの境界ビジュアルがいくつか用意されています。 開発者は、これらのビジュアルのプレハブバリアントを作成し、ニーズに合わせてカスタマイズすることをお勧めします。 ハンドルのアニメーションと状態には StateVisualizer が搭載されているため、開発者はアフォーダンスの外観をさらにカスタマイズできます。
オクルージョン スタイルを処理する
これらの境界ビジュアルは、ユーザーの煩わしを減らしながら、簡略化されたビジュアルデザインを提供します。 境界の端に沿った関連するハンドルのみが表示されます。 境界ビジュアルは、ユーザーの意図と選択の進行状況に応じて、色/太さを縮小、展開、変更します。 この境界の表示スタイルを使用することを強くお勧めします。
意図のみ
コンテキストによっては、ハンドルが望ましくない場合があり、開発者は境界ビジュアルをユーザーの意図を示す楽しいインジケーターとして単独で使用したい場合があります。 このプレハブはジョブを実行しますが、HandleType.None を選択することで、他の境界ビジュアルで同じ効果を実現できます。 絞り込み可能な境界ビジュアルは、ハンドルベースの操作だけでなく、さまざまなコンテキストに対する満足のいく楽しいビジュアル フィードバック要素であることがわかりました。
従来のスタイル
これらの境界ビジュアルには、ボックスのすべてのハンドルとエッジが表示されます。 これは、従来の設計言語と MRTK 2.x で見られる以前の動作とより密接に一致します。ただし、不要な視覚的ノイズが原因で、この設計はユーザーにとってより気が散る可能性があります。 さらに、オブジェクトの前 (および背後) にあるハンドルが存在すると、間接的な視線入力ピンチ操作に問題が発生する可能性があります。 新しいアプリケーション 、特に視線入力のターゲット設定を利用するアプリケーションには、このスタイルを使用しないことをお勧めします。
操作の設計
現在のイテレーションでは、単純なアクティブ化/非アクティブ化操作を提供します。 インプレースで境界をクリックすると (つまり、オブジェクトを選択し、オブジェクトを移動せず、解放します)、ハンドルのオンとオフを切り替えることができます。 このチェックの距離許容値は、このプロパティを使用して DragToggleThreshold
調整でき、このアクティブ化動作自体を ToggleHandlesOnClick
有効または無効にすることができます。
ハンドルは、設定することで HandlesActive
、いつでもコードから手動でアクティブ化または非アクティブ化できます。
自動境界の計算
BoundsControl は、関連付けられたオブジェクトの境界を自動的に計算しようとします。 特定の境界図形が必要な場合は、オプションをオンに OverrideBounds
して、境界オブジェクトを直接指定します。 境界計算システムは、指定されたオーバーライド オブジェクトの境界のみを計算します。
アルゴリズム BoundsCalculationMethod
が境界を計算する方法に影響します。 囲まれたオブジェクトの視覚的な形状が必ずしもコライダーと一致しない場合、またはその逆が当てはまる場合、開発者はレンダラーまたはコライダーの境界を使用するか、またはその両方の組み合わせを使用するように計算方法を調整できます。
計算方法に関係なく、 Padding
このオプションは境界をワールド単位で均一に埋め込みます。 境界がフラット化されている場合、フラット化された軸は埋め込まれません。
フラット化
BoundsControl は、2D コンテンツの操作にも使用できます。 FlattenMode
にAuto
設定すると、オブジェクトが任意の軸に沿って十分に平坦な場合、BoundsControl はそれ自体を 2D 四角形の境界にフラット化します。 オブジェクトが十分に平坦でないが、長方形の境界アフォーダンスが必要な場合は、 FlattenMode.Always
常に最も細い軸に沿って BoundsControl がフラット化されます。 逆に、 FlattenMode.Never
オブジェクトが非常に薄い場合でも、BoundsControl がフラット化されないようにします。
操作オプション
BoundsControl の操作動作は、いくつかの方法で調整できます。 このオプションは RotateAnchor
、回転アフォーダンスを使用するときに BoundsControl を回転させるピボット ポイントを制御します。 一部のオブジェクトのピボット ポイントは、視覚的な中心から遠く離れているため、回転ハンドルを使用して操作するときに不快感や不正確になる可能性があります。 このオブジェクトをBoundsCenter
RotateAnchor
指定すると、BoundsControl は、オブジェクトの実際の原点ではなく、計算された境界の幾何学的中心を中心に常に回転します。
スケーリング動作は、いずれか Uniform
または Non Uniform
に設定できます。 均一モードでは、オブジェクトのすべての軸が一緒に拡大縮小され、縦横比と外観が維持されます。 均一でないスケーリングを使用すると、オブジェクトの各軸を個別にスケーリングできます。