本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。
MRTKv2のGuidesドキュメント
以下のドキュメントを読み進めていきます。
microsoft.github.io
以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io
本記事では以下のページを読み進めます。
microsoft.github.io
ConstraintManager
ConstraintManager を使用すると、一連の制約をトランスフォームに適用できます。
ゲームオブジェクトに TransformConstraint タイプのコンポーネントがアタッチされているもので活用できます。
ConstraintManager は、ゲームオブジェクトにアタッチされている全てのコンストレイントコンポーネントを自動的に収集してトランスフォームに適用します。
ただし、ユーザーは適用されるコンストレイントのリストを手動で構成し、コンストレイントのサブセットのみを適用できるようにすることを選択できます。
現在、次の MRTK の UX 要素が ConstraintManager をサポートしています。
・Bounds control
・Object manipulator
インスペクターのプロパティとフィールド
ConstraintManager は、次の2つのモードで操作できます
・Auto constraint selection(自動選択)
・Manual constraint selection(手動選択)
AutoConstraintSelection
ConstraintManager のデフォルトモードは AutoConstraintSelection です。
これはアタッチされている全てのコンストレイントコンポーネントのリストと、コンポーネントへの移動、コンストレイントの追加ボタンを提供します。
ManualConstraintSelection
ConstraintManager のモードが ManualConstraintSelection のとき、リストでリンクされているコンストレイントのみが変換に適用されます。
リストにはユーザーが選択した制約のみが表示されます。
ボタンまたはオプションに移動してエントリを削除または追加します。
ManualConstraintSelection を初めて有効にする場合、コンストレイントマネージャーはアタッチされたコンストレイントコンポーネントを全てリストに入力します。
Remove entry
これを実行すると、リストからエントリが削除されます。
このオプションはゲームオブジェクトからコンストレイントコンポーネントを削除しないことに注意してください。
コンストレイントコンポーネントは、対象のコンポーネントを参照している他のコンポーネントを誤って壊さないように、常に手動で削除する必要があります。
TransformConstraint
コンストレイントは何らかの方法で操作を制限するために使用できます。
例えば、一部のアプリケーションではオブジェクトを回転させつつ、直立させたままにしたい場合があります。
この場合、RotationAxisConstraint をオブジェクトに追加して、回転をY軸の回転のみに制限するために使用できます。
MRTKにはいくつかのコンストレイントがあり、その全てを以下に説明します。
新しいコンストレイントを定義して、一部のアプリケーションで必要になる固有の操作動作を作成することもできます。
これを行うには、TransformConstraint を継承するスクリプトを作成し、ConstraintType プロパティと ApplyConstraint メソッドを実装します。
オブジェクトに新しいコンストレイントを追加した場合、ConstraintManager に登録する必要があります。
ConstraintManager の AutoConstraintSelection に表示されるか、ManualConstraintSelection のエントリのドロップダウンを追加する必要があります。
MRTK によって提供される全てのコンストレイントは、次のプロパティを共有します。
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 の場合はスケールの絶対値として解釈されます。