本日は Blender のアドオン枠です。
MRTK の物を掴むオブジェクトマニピュレータ(ObjectManipulator)に移動や回転の制限を設定する手順を記事にします。
MRTKのObjectManipulator
MRTK の ObjectManipulator は、片手か両手を使ってオブジェクトの移動、回転、拡大縮小を行うコンポーネントです。
ObjectManipulator は様々な入力に対応しているため、HoloLens2 の多関節ハンドや HoloLens1 の視線レイとタップ、没入型ヘッドセットのモーションコントローラなどでも機能します。
microsoft.github.io
本記事ではここに Constraint manager を使って移動軸や回転軸の制限を設定してみます。
microsoft.github.io
MRTKのインポート
MRTKのインポート手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
ObjectManipulatorの設定
初めに ObjectManipulator でオブジェクトを操作する場合、対象のオブジェクトにアタリ判定として Collider が設定されている必要があります。
対象のオブジェクトに Collider が設定されていない場合は事前にオブジェクトの形状に合わせて設定しておきます。
ObjectManipulator で操作したいオブジェクトに ObjectManipulator コンポーネントを追加します。
これで ObjectManipulator コンポーネントの設定は完了です。
シーンを再生すると、オブジェクトを手で掴んで操作できます。
ただしデフォルト設定では何の制限も設定されていないため、手を捻る操作を行うと、そのままキャラクターが傾くように回転されてしまいます。
MRTK のシミュレーション利用方法については以下の記事を参考にしてみてください。
bluebirdofoz.hatenablog.com
ConstraintManagerの設定
今回は、これに ConstraintManager を設定して、キャラクターが常に直立するようにY軸方向にのみ回転する制限を追加します。
例えば ConstraintManager には以下の種類の制限コンポーネントがあります。
MoveAxisConstraint
移動軸に制限を設定します。
例えば、X軸方向、Y軸方向、Z軸方向、それらを組み合わせた方向にのみオブジェクトを移動できるよう制限を設定します。
RotationAxisConstraint
回転軸に制限を設定します。
例えば、X軸方向、Y軸方向、Z軸方向、それらを組み合わせた方向にのみオブジェクトを回転できるよう制限を設定します。
MinMaxScaleConstraint
拡大縮小のサイズに制限を設定します。
拡大縮小サイズの上限、下限を設定します。トランスフォームに関わらず、初期状態のサイズを基準に設定することもできます。
制限に関する詳細は以下のページを参照ください。
microsoft.github.io
回転軸の制限を設定するため、オブジェクトに RotationAxisConstraint コンポーネントを追加します。
RotationAxisConstraint では以下の設定が行えます。
Hand Type:利用可能な手の制限(右手、左手) Proximity Type:利用可能な距離の制限(近距離、遠距離) Constraint On Rotation:制限する回転軸(X軸、Y軸、Z軸) Use Local Space For Constraint:オブジェクトローカル軸を利用する
今回はワールド軸のY軸方向のみ回転させるため、X軸とZ軸の回転を制限します。
[Constraint On Rotation]で[X Axis]と[Z Axis]にチェックを入れます。
シーンを再生して動作を確認します。
オブジェクトを掴んで手を捻ったとき、オブジェクトがY軸方向にのみ回転すれば成功です。