MRが楽しい

MRやVRについて学習したことを書き残す

MRTK v2のドキュメントを少しずつ読み解く コンストレイントマネージャー

本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。

MRTKv2のGuidesドキュメント

以下のドキュメントを読み進めていきます。
microsoft.github.io

以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io

本記事では以下のページを読み進めます。
microsoft.github.io
f:id:bluebirdofoz:20201028213137j:plain

ConstraintManager

ConstraintManager を使用すると、一連の制約をトランスフォームに適用できます。
ゲームオブジェクトに TransformConstraint タイプのコンポーネントがアタッチされているもので活用できます。

ConstraintManager は、ゲームオブジェクトにアタッチされている全てのコンストレインコンポーネントを自動的に収集してトランスフォームに適用します。
ただし、ユーザーは適用されるコンストレイントのリストを手動で構成し、コンストレイントのサブセットのみを適用できるようにすることを選択できます。

現在、次の MRTK の UX 要素が ConstraintManager をサポートしています。
・Bounds control
・Object manipulator

インスペクターのプロパティとフィールド

ConstraintManager は、次の2つのモードで操作できます

・Auto constraint selection(自動選択)
・Manual constraint selection(手動選択)

AutoConstraintSelection

f:id:bluebirdofoz:20201028213152j:plain

ConstraintManager のデフォルトモードは AutoConstraintSelection です。
これはアタッチされている全てのコンストレインコンポーネントのリストと、コンポーネントへの移動、コンストレイントの追加ボタンを提供します。

Add constraint to game object

このボタンを使用すると、コンストレインコンポーネントをインスペクターから直接追加できます。
プロジェクト内の全てのコンストレイントタイプがここに表示されます。
詳細については、後述の TransformConstraint を参照してください。

Go to component

オブジェクトで見つかった全てのコンストレイントは[Go to component]ボタンと共に一覧表示されます。
このボタンを押すと、インスペクターは選択したコンストレイトコンポーネントまでスクロールします。

ManualConstraintSelection

f:id:bluebirdofoz:20201028213209j:plain

ConstraintManager のモードが ManualConstraintSelection のとき、リストでリンクされているコンストレイントのみが変換に適用されます。
リストにはユーザーが選択した制約のみが表示されます。
ボタンまたはオプションに移動してエントリを削除または追加します。
ManualConstraintSelection を初めて有効にする場合、コンストレイントマネージャーはアタッチされたコンストレインコンポーネントを全てリストに入力します。

Remove entry

これを実行すると、リストからエントリが削除されます。
このオプションはゲームオブジェクトからコンストレインコンポーネントを削除しないことに注意してください。
コンストレインコンポーネントは、対象のコンポーネントを参照している他のコンポーネントを誤って壊さないように、常に手動で削除する必要があります。

Add entry

これを実行すると、リストに含まれていない使用可能な全てのコンストレインコンポーネントを示すドロップダウンが開きます。
エントリのいずれかをクリックすると、そのコンポーネントがリストに追加されます。

Add new constraint

これを実行すると、選択したタイプのコンポーネントをゲームオブジェクトに追加します。
新しく作成されたコンストレインコンポーネントはリストに追加されます。

TransformConstraint

コンストレイントは何らかの方法で操作を制限するために使用できます。
例えば、一部のアプリケーションではオブジェクトを回転させつつ、直立させたままにしたい場合があります。
この場合、RotationAxisConstraint をオブジェクトに追加して、回転をY軸の回転のみに制限するために使用できます。
MRTKにはいくつかのコンストレイントがあり、その全てを以下に説明します。

新しいコンストレイントを定義して、一部のアプリケーションで必要になる固有の操作動作を作成することもできます。
これを行うには、TransformConstraint を継承するスクリプトを作成し、ConstraintType プロパティと ApplyConstraint メソッドを実装します。
オブジェクトに新しいコンストレイントを追加した場合、ConstraintManager に登録する必要があります。
ConstraintManager の AutoConstraintSelection に表示されるか、ManualConstraintSelection のエントリのドロップダウンを追加する必要があります。

MRTK によって提供される全てのコンストレイントは、次のプロパティを共有します。

HandType

コンストレイントを片手、または両方の操作に使用するかどうかを指定します。
このプロパティはフラグであるため、組合せてオプションを選択できます。

・片手(One handed):選択した場合、片手操作中にコンストレイントが使用されます。
・両手(Two handed):選択した場合、両手操作中にコンストレイントが使用されます。

ProximityType

拘束を近距離、遠距離、または両方の操作に使用するかどうかを指定します。
このプロパティはフラグであるため、組合せてオプションを選択できます。

・近距離(Near):選択した場合、コンストレイントは近距離の操作中に使用されます。
・遠距離(Far):選択した場合、コンストレイントは遠距離の操作中に使用されます。

FaceUserConstraint

オブジェクトが常にユーザーの方向を向くように回転が制限されます。
これはスレートまたはパネルに利用する際に役立ちます。
固有のプロパティは次のとおりです。

Face away

true の場合、オブジェクトはユーザーの反対側を向きます。

FixedDistanceConstraint

操作開始時の操作オブジェクトと、別のオブジェクトの間の距離を固定します。
これは操作されたオブジェクトからヘッドトランスフォームまでの距離を固定するなどの動作に役立ちます。
固有のプロパティは次のとおりです。

Constraint transform

固定距離を保つ対象となるオブジェクトを指定します。
デフォルトはメインカメラです。

FixedRotationToUserConstraint

操作中のユーザーと操作対象オブジェクト間の相対的な回転方向を維持します。
これは操作されたオブジェクトが操作の開始時と同じ面を常にユーザーに表示することを保証します。
このため、スレートまたはパネルに利用する際に役立ちます。
固有のプロパティはありません。

FixedRotationToWorldConstraint

操作中の操作オブジェクトのグローバル回転を維持します。
これは操作によって回転を与える必要がない場合に役立ちます。
固有のプロパティはありません。

MaintainApparentSizeConstraint

オブジェクトがユーザーからどれだけ離れていても、ユーザーにとって同じ見かけのサイズを維持します。
これを使用して、操作中にスレートまたはテキストパネルを読み取り可能な状態に保つことができます。
固有のプロパティはありません。

MoveAxisConstraint

オブジェクトの移動軸を固定できます。
これは平面上または線に沿ってオブジェクトを操作する場合に役立ちます。
固有のプロパティは次のとおりです。

Constraint on movement

移動を制限する軸を指定します。
デフォルトでは、これらの軸はローカル軸ではなくグローバル軸になります。
このプロパティはフラグであるため、任意の数のオプションを選択できます。

・X軸(X Axis):選択した場合、X軸方向の移動は制限されます。
・Y軸(Y Axis):選択した場合、Y軸方向の移動は制限されます。
・Z軸(Z Axis):選択した場合、Z軸方向の移動は制限されます。

Use local space for constraint

true の場合、操作されたオブジェクトのローカル軸を元に制限します。
デフォルトでは False のため、グローバル軸を参照します。

RotationAxisConstraint

回転を制限する軸を指定します。
これは操作されたオブジェクトを直立に保ちながら回転する場合に役立ちます。
固有のプロパティは次のとおりです。

Constraint on movement

回転を制限する軸を指定します。
デフォルトでは、これらの軸はローカル軸ではなくグローバル軸になります。
このプロパティはフラグであるため、任意の数のオプションを選択できます。

・X軸(X Axis):選択した場合、X軸方向の回転は制限されます。
・Y軸(Y Axis):選択した場合、Y軸方向の回転は制限されます。
・Z軸(Z Axis):選択した場合、Z軸方向の回転は制限されます。

Use local space for constraint

true の場合、操作されたオブジェクトのローカル軸を元に制限します。
デフォルトでは False のため、グローバル軸を参照します。

MinMaxScaleConstraint

操作対象のスケールに最小値と最大値を設定できます。
これはユーザーがオブジェクトを小さくし過ぎたり、大きくし過ぎたりするのを防ぐのに役立ちます。
固有のプロパティは次のとおりです。

Scale minimum

操作中の最小スケール値を指定します。

Scale maximum

操作中の最大スケール値を指定します。

Relative to initial state

True の場合、最小、最大の値はオブジェクトの初期スケールを基準として解釈されます。
False の場合はスケールの絶対値として解釈されます。