制約マネージャー — MRTK2
制約マネージャーを使用すると、変換に制約コンポーネントのセットを適用できます。 ゲーム オブジェクトにアタッチされている TransformConstraint
型のコンポーネントが対象になります。
既定では、制約マネージャーは、ゲーム オブジェクトにアタッチされているすべての制約コンポーネントを自動的に集め、処理される変換に適用します。
ただし、適用される制約のリストを手動で構成し、アタッチされた制約のサブセットのみが適用されるようにすることもできます。
現在、制約マネージャーは次の MRTK UX 要素でサポートされています。
インスペクターのプロパティとフィールド
制約マネージャーは、次の 2 つのモードで操作できます。
- 自動による制約選択
- 手動による制約選択
自動による制約選択
制約マネージャーの既定のモードである自動による制約選択では、アタッチされているすべての制約コンポーネントのリストに加えて、移動ボタンと制約の追加ボタンが表示されます。
ゲーム オブジェクトへの制約の追加
このボタンを使用すると、制約マネージャーのインスペクターから制約コンポーネントを直接追加できます。 プロジェクト内のすべての制約の種類がここに表示されます。 詳細については、「変換の制約」を参照してください。
コンポーネントへの移動
オブジェクト上で見つかったすべての制約が、[Go to component](コンポーネントに移動) ボタンと共にここに表示されます。 このボタンを使用すると、選択した制約コンポーネントを構成できるように、そこまでインスペクターがスクロールされます。
手動による制約選択
制約マネージャーが手動モードに設定されている場合は、制約リストでリンクされている制約のみが処理されて変換に適用されます。 表示されるリストには、ユーザーが選択した制約に加えて、移動ボタンやエントリを削除または追加するためのオプションが表示されます。 手動モードを初めて有効にすると、制約マネージャーによって、アタッチされた制約コンポーネントを選択するための開始点として、使用できるすべてのコンポーネントがリストに表示されます。
エントリの削除
手動で選択したリストからエントリを削除します。 このオプションはゲーム オブジェクトから制約コンポーネントを削除しないことに注意してください。 このコンポーネントを参照している他のコンポーネントを誤って壊してしまわないように、制約コンポーネントは常に手動で削除する必要があります。
エントリの追加
エントリの追加を選択すると、ドロップダウンが開き、手動のリストにまだ含まれていない使用可能なすべての制約コンポーネントが表示されます。 いずれかのエントリをクリックすると、そのコンポーネントが手動による制約選択に追加されます。
新しい制約の追加
このオプションを選択すると、選択した種類のコンポーネントがゲーム オブジェクトに追加され、新しく作成した制約コンポーネントが手動制約リストに追加されます。
変換の制約
制約は、何らかの方法で操作を制限するために使用できます。 たとえば、アプリケーションによっては回転が必要になる場合がありますが、オブジェクトを直立状態に維持することが必要な場合もあります。 この場合、RotationAxisConstraint
をオブジェクトに追加し、回転を y 軸回転に制限するために使用できます。 MRTK にはいくつかの制約が用意されており、そのすべてについて以下で説明します。
また、新しい制約を定義し、一部のアプリケーションで必要になる可能性がある独自操作の動作を作成するために使用することもできます。 これを行うには、TransformConstraint
から継承するスクリプトを作成し、ConstraintType
抽象プロパティと ApplyConstraint
抽象メソッドを実装します。 オブジェクトに新しい制約を追加すると、定義した方法で操作が制限されます。 この新しい制約は、制約マネージャーの自動選択または手動モードでのエントリの追加のドロップダウンにも表示されます。
MRTK で提供されるすべての制約には、次の共通プロパティがあります。
ハンドの種類
制約を片手、両手、または両方のどの種類の操作に使用するかを指定します。 このプロパティはフラグなので、両方のオプションを選択できます。
- 片手 (One handed): 選択すると、制約は片手操作時に使用されます。
- 両手 (Two handed): 選択すると、制約は両手操作時に使用されます。
近接の種類
制約を近く、遠く、または両方のどの種類の操作に使用するかを指定します。 このプロパティはフラグなので、両方のオプションを選択できます。
- 近く (Near): 選択すると、制約は近くの操作時に使用されます。
- 遠く (Far): 選択すると、制約は遠くの操作時に使用されます。
FaceUserConstraint
この制約がオブジェクトにアタッチされている場合、オブジェクトが常にユーザーの方を向くように回転が制限されます。 これはスレートやパネルに便利です。
FaceUserConstraint
のプロパティは次のとおりです。
反対側を向く
true の場合、オブジェクトはユーザーの反対側を向きます。
FixedDistanceConstraint
この制約は、操作されるオブジェクトと別のオブジェクト変換との間の、操作開始時の距離を固定します。 これは、操作されるオブジェクトからヘッド変換までの距離を固定するなどの動作に役立ちます。
FixedDistanceConstraint
のプロパティは次のとおりです。
制約変換
これは、操作されるオブジェクトからの距離が固定であるもう 1 つの変換です。 既定値は、カメラの変換です。
FixedRotationToUserConstraint
この制約は、操作中に、ユーザーと操作されるオブジェクトの間の相対的な回転を固定します。 この制約は、操作されるオブジェクトが操作開始時と同じ面を常にユーザーに向けるようにするので、スレートやパネルに便利です。
FixedRotationToUserConstraint
に固有のプロパティはありません。
FixedRotationToWorldConstraint
この制約は、操作されるオブジェクトの操作中にグローバルな回転を固定します。 これは、操作によって回転を与えないようにすることが必要な場合に役立ちます。
FixedRotationToWorldConstraint
に固有のプロパティはありません。
MaintainApparentSizeConstraint
この制約がオブジェクトにアタッチされている場合、オブジェクトがユーザーからどれだけ離れていても、ユーザーに対して見かけでは同じサイズが維持されます (つまり、ユーザーの視野において同じ割合を占めます)。 これを使用すると、スレートまたはテキスト パネルを操作中も読みやすい状態に維持することができます。
MaintainApparentSizeConstraint
に固有のプロパティはありません。
MoveAxisConstraint
この制約を使用すると、操作されるオブジェクトをどの軸に沿って移動できるかを固定できます。 これは、平面上で、または直線に沿ってオブジェクトを操作する場合に便利です。
MoveAxisConstraint
のプロパティは次のとおりです。
移動に関する制約
どの軸での移動を禁止するかを指定します。 既定では、これらの軸はローカルではなくグローバルですが、以下で変更できます。 このプロパティはフラグなので、任意の個数のオプションを選択できます。
- X 軸: 選択すると、x 軸に沿った移動が制約されます。
- Y 軸: 選択すると、y 軸に沿った移動が制約されます。
- Z 軸: 選択すると、z 軸に沿った移動が制約されます。
制約にローカル空間を使用する
true の場合、操作されるオブジェクトのローカル変換軸に相対的に制約します。 既定では false です。
RotationAxisConstraint
この制約を使用すると、操作されるオブジェクトが回転できる軸を固定できます。 たとえば、操作されるオブジェクトを直立させたまま、y 軸を中心にした回転を許可する場合に便利です。
RotationAxisConstraint
のプロパティは次のとおりです。
回転に関する制約
禁止する回転軸を指定します。 既定では、これらの軸はローカルではなくグローバルですが、以下で変更できます。 このプロパティはフラグなので、任意の個数のオプションを選択できます。
- Y 軸: 選択すると、y 軸を中心にした回転が制約されます。
- Z 軸: 選択すると、z 軸を中心にした回転が制約されます。
- X 軸: 選択すると、x 軸を中心にした回転が制約されます。
制約にローカル空間を使用する
true の場合、操作されるオブジェクトのローカル変換軸に相対的に制約します。 既定では false です。
MinMaxScaleConstraint
この制約を使用すると、操作されるオブジェクトのスケールに最小値と最大値を設定できます。 これは、ユーザーがオブジェクトを小さくしすぎたり大きくしすぎたりするのを防ぐのに便利です。
MinMaxScaleConstraint
のプロパティは次のとおりです。
Scale minimum (スケールの最小値)
操作中の最小スケール値。
Scale maximum (スケール最大値)
操作中の最大スケール値。
Relative to initial state (初期状態に対する相対)
true の場合、上記の値はオブジェクトの初期スケールに対する相対値として解釈されます。 それ以外の場合は、絶対スケール値として解釈されます。