MRが楽しい

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

MRTKv2.xでオブジェクトを両手でポイントして移動・回転・拡縮する その2(操作に制約を加える)

本日はMRTKv2.xの小ネタ枠です。
MRTKv2.xでオブジェクトを両手でポイントして移動・回転・拡縮する方法を記事にします。
今回は操作に制約を加える方法についてです。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

ConstraintManagerを設定する

ConstraintManagerコンポーネントは移動・回転・拡縮の制約を設定するために利用します。
ObjectManipulatorコンポーネントを追加した際に自動で同オブジェクトに設定されています。

制約を追加する際は[Add Constraint to GameObject]のプルダウンから追加したい種類の制約を選択します。

例えば、以下の種類の制限コンポーネントがあります。

MoveAxisConstraint

移動軸に制限を設定します。
例えば、X軸方向、Y軸方向、Z軸方向、それらを組み合わせた方向にのみオブジェクトを移動できるよう制限を設定します。

RotationAxisConstraint

回転軸に制限を設定します。
例えば、X軸方向、Y軸方向、Z軸方向、それらを組み合わせた方向にのみオブジェクトを回転できるよう制限を設定します。

MinMaxScaleConstraint

拡大縮小のサイズに制限を設定します。
拡大縮小サイズの上限、下限を設定します。トランスフォームに関わらず、初期状態のサイズを基準に設定することもできます。

FaceUserConstraint

オブジェクトは常にユーザーの方を向くようになります。

FixedRotationToUserConstraint

操作開始時のオブジェクトの相対的な向きを固定します。

FixedDistanceConstraint

操作開始時に操作対象オブジェクトとの距離を固定します。

MaintainApparentSizeConstraint

操作開始時からのユーザーから見た時の見かけのサイズが維持されます

制限に関する詳細は以下のページを参照ください。
learn.microsoft.com

動作確認

試しにMoveAxisConstraintを選択して移動軸を固定してみます。

プルダウンでコンポーネントを選択すると、MoveAxisConstraintコンポーネントがオブジェクトに追加されます。

RotationAxisConstraint では以下の設定が行えます。

Hand Type:利用可能な手の制限(右手、左手)
Proximity Type:利用可能な距離の制限(近距離、遠距離)
Execution Order:この制約の実行順序の優先順位。小さい数字が大きい数字より先に実行される。
Constraint On Rotation:制限する回転軸(X軸、Y軸、Z軸)
Use Local Space For Constraint:オブジェクトローカル軸を利用する

今回はワールド軸のY軸方向のみに移動させるため、X軸とZ軸の回転を制限します。
[Constraint On Movement]で[X Axis]と[Z Axis]にチェックを入れます。

シーンを再生して動作を確認します。
オブジェクトを掴んで手を動かしたとき、オブジェクトがY軸方向にのみ移動すれば成功です。