MRが楽しい

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

MRTKのObjectManipulatorで指定の平面上でオブジェクトを移動する

本日は MRTK の小ネタ枠です。
MRTKのObjectManipulatorで指定の平面上でオブジェクトを移動する方法を記事にします。
f:id:bluebirdofoz:20210930235303j:plain

ObjectManipulator

片手または両手を使ったオブジェクトの移動、スケール変更、回転を実現するコンポーネントです。
設定を変更することで様々な入力のカスタマイズが可能です。
docs.microsoft.com

サンプルプロジェクトの作成

MRTK をインポートしたサンプルプロジェクトを作成します。

MRTK のインポートと基本設定

MRTK のインポートと HoloLens 向けプロジェクトの基本設定を行い、サンプルプロジェクトを作成します。
手順の詳細は以下の記事を参照してください。
bluebirdofoz.hatenablog.com

サンプルシーンの作成

シーンに空オブジェクトを作成します。
また、オブジェクトが指定平面上を移動しているのが分かりやすくなるように Plane オブジェクトを子オブジェクトに追加しました。
f:id:bluebirdofoz:20210930235329j:plain

3DObject を空オブジェクトの子オブジェクトとして追加し、ObjectManipulator を設定します。
f:id:bluebirdofoz:20210930235338j:plain

ObjectManipulatorの設定

ObjectManipulator の制約を設定して、指定の平面上で動くようにします。
[ConstrainManager]コンポーネントの[AddConstraintToGameObject]のプルダウンを開き、[MoveAxisConstraint]を選択します。
f:id:bluebirdofoz:20210930235346j:plain

これで[MoveAxisConstraint]コンポーネントが追加されます。
今回は3Dオブジェクトのローカル軸基準で制約を設定したいので[UseLocalSpaceForConstraint]にチェックを入れます。
f:id:bluebirdofoz:20210930235354j:plain

次に[ConstraintOnMovement]で動きを制限する軸を指定します。
今回はローカル軸を指定するようにしたので平面の直交軸である[YAxis]方向の移動を制限します。
f:id:bluebirdofoz:20210930235402j:plain

動作確認

シーンを再生して動作を確認します。
f:id:bluebirdofoz:20210930235410j:plain

3Dオブジェクトを掴んで動かすとY軸方向の移動が制限されているため、指定の平面上を移動するようにオブジェクトを移動できます。
f:id:bluebirdofoz:20210930235419j:plain

またローカル軸を指定しているので、オブジェクトの角度が変化しても平面上を移動します。
f:id:bluebirdofoz:20210930235427j:plain