次の方法で共有


制約 — MRTK3

ConstraintManager では、一連の制約コンポーネントを変換に適用できます。 既定では、制約マネージャーは、アタッチされているすべての 制約コンポーネント を自動的に収集し、ターゲット オブジェクトに適用します。 ただし、ユーザーは、適用された制約の一覧を手動で構成し、アタッチされた制約のサブセットのみを使用できるようにすることもできます。

注:

MRTK3 は現在、MRTK 2.x からの制約の限定されたサブセットを提供しています。 現在、開発者ワークフローをソルバーとエラスティックと統合するために、制約システムのリファクタリングを調査しています。 お楽しみに!

現在、次の MRTK UX 要素は制約をサポートしています。

制約マネージャーは、次の 2 つのモードで動作できます。

  • 制約の自動選択
  • 手動制約の選択

制約の選択

制約の自動選択

自動選択モード

既定の 自動 モードでは、アタッチされているすべての制約コンポーネントが一覧表示されます。 [コンポーネントに移動] ボタンを使用して、インスペクターの コンポーネントに 直接ジャンプするか、ドロップダウンから新しい制約を追加できます。

手動制約の選択

手動選択モード

制約マネージャーが手動モードに設定されている場合、制約リストにリンクされている制約のみが処理され、変換に適用されます。 手動モードを初めて有効にすると、マネージャーは現在アタッチされているすべての制約をリストに自動的に設定します。

注:

[ エントリの削除] アクションは、手動選択リストからのみ制約を削除します。 コンポーネントは引き続き GameObject に存在します。

実行順序

各制約の実行順序は、制約自体の [実行順序] オプションで定義できます。 順序は、制約マネージャーに表示される一覧に反映されます。 一部の制約は、異なる順序で結合されると動作が異なるため、各制約の優先順位に留意し、それに応じて順序を調整します。

変換制約

制約を使用して、何らかの方法で操作を制限できます。 たとえば、一部のアプリケーションでは回転が必要で、オブジェクトが直立したままである場合があります。 この場合、オブジェクトに RotationAxisConstraint を追加し、回転を y 軸の回転に制限するために使用できます。 MRTK にはいくつかの制約があり、これらはすべて以下で説明します。

また、新しい制約を定義し、それらを使用して、一部のアプリケーションで必要になる可能性がある一意の操作動作を作成することもできます。 これを行うには、 TransformConstraint から継承するスクリプトを作成し、抽象 ConstraintType プロパティと抽象 ApplyConstraint メソッドを実装します。 新しい制約がドロップダウンに表示され、オブジェクトに追加されると制約マネージャーに自動的に登録されます。

MRTK によって提供されるすべての制約は、次のプロパティを共有します。

Hand Type は、片手操作、片手操作、または両方の種類の操作に制約を使用するかどうかを指定します。 このプロパティはフラグであるため、両方のオプションを選択できます。

  • 片手: 選択した場合、片手操作中に制約が使用されます。
  • 片手: 制約は、選択した場合、片手操作中に使用されます。

ProximityType は、近接操作、遠距離操作、または両方の種類の操作に制約を使用するかどうかを指定します。 このプロパティはフラグであるため、両方のオプションを選択できます。

  • Near: 選択されている場合、近くの操作中に制約が使用されます。
  • Far: 選択されている場合、ファー操作中に制約が使用されます。

FaceUserConstraint

この制約は、オブジェクトの回転を制限して、常にユーザーと向き合います。 [顔を離す] オプションは、正の Z 軸と負の Z 軸のどちらを使用するかを制御します。

FaceUserConstraint のデモンストレーション

FixedDistanceConstraint

この制約は、操作の開始時に操作されたオブジェクトと別のオブジェクト変換の間の距離を修正します。 これは、操作されたオブジェクトからヘッド変換までの距離を修正するなどの動作に役立ちます。 [制約変換] フィールドは既定でカメラ変換に設定され、操作されたオブジェクトの距離が固定されているもう 1 つの変換です。

FixedDistanceConstraint のデモンストレーション

MaintainApparentSizeConstraint

この制約がオブジェクトにアタッチされている場合、オブジェクトがユーザーからどれだけ離れているかに関係なく、ユーザーに対して同じ見かけのサイズが維持されます (つまり、ユーザーの視野の同じ割合を占めます)。 これは、操作中にスレートまたはテキスト パネルが読み取り可能な状態を維持するために使用できます。

MaintainApparentSizeConstraint のデモ

MoveAxisConstraint

この制約は、操作されたオブジェクトを移動できる軸に沿って修正するために使用できます。 これは、平面のサーフェスを介して、または線に沿ってオブジェクトを操作する場合に役立ちます。
[ 移動時の制約] フィールドでは、移動を禁止する軸を指定します。 既定では、これらの軸はローカルではなくグローバルになりますが、これは以下で変更できます。 このプロパティはフラグであるため、任意の数のオプションを選択できます。

MoveAxisConstraint のデモンストレーション

MinMaxScaleConstraint

この制約により、オブジェクトのスケールが制限されます。ユーザーがオブジェクトを使用できないサイズまたは大きいサイズにスケーリングできないようにするのに役立ちます。 ハンドルベースのスケーリング ( BoundsControl を使用) と、双方向ダイレクト スケーリング ( ObjectManipulator を使用) の両方で機能します。 [ 初期状態に対する相対] オプションは、特定の 最小 スケール値と 最大スケール 値が絶対値であるか、またはオブジェクトの初期スケールで乗算されるかを定義します。

MinMaxScaleConstraint のデモンストレーション

RotationAxisConstraint

この制約を使用して、操作されたオブジェクトを回転できる軸を修正できます。 これは、操作されたオブジェクトを直立したままで、y 軸の回転を許可する場合などに役立ちます。
[ 回転時の制約] フィールドでは、回転を回避する軸を指定します。 既定では、これらの軸はローカルではなくグローバルになりますが、これは以下で変更できます。 このプロパティはフラグであるため、任意の数のオプションを選択できます。

RotationAxisConstraint のデモンストレーション