本日はMRTKv2.xの小ネタ枠です。
MRTKv2.xでオブジェクトを両手でポイントして移動・回転・拡縮する方法を記事にします。
今回は掴むオブジェクトの優先度を設定する方法についてです。
前回記事
以下の前回記事の続きです。
bluebirdofoz.hatenablog.com
掴むオブジェクトの優先度を設定する
MRTKのポインター機能ではレイヤーごとに優先度を設定できます。
以下のサンプルシーンを作成しました。
2つのDefaultレイヤーで設定された掴み操作可能なオブジェクトを配置しています。
この状態では当然手前にあるCubeオブジェクトが優先してポイントされ、掴むことができます。
今回はCubeオブジェクトの背後にあるSphereオブジェクトを優先的に掴めるよう設定を行ってみます。
優先するレイヤーを作成する
初めに優先度の高いオブジェクトを識別するためのレイヤーを作成します。
Inspectorビューの[Layer]プルダウンから[Add Layer..]を開きます。
識別用のレイヤーを任意の空きレイヤーに名前を入力して登録します。
今回は Priority Layer という名前のレイヤーを追加しました。
Sphereオブジェクトを優先できるように、SphereオブジェクトのレイヤーをPriority Layerに変更します。
Inspectorビューの[Layer]プルダウンからレイヤーを選択できます。
プロファイルを編集できるようにする
ポインターの優先度の設定はMixedRealityToolkitオブジェクトに設定されているMRTKのプロファイルから行います。
デフォルトのプロファイルは変更できないため、[Copy & Customize]して複製します。
更に[Input]タブのプロファイルを編集するため、こちらのプロファイルも[Clone]して複製します。
[Pointers]パネルのプロファイルを編集するため、プロファイルを[Clone]して複製します。
これでポインターの設定を変更できるようになりました。
因みに先ほど追加したレイヤーは自動でポインターの対象レイヤーに追加されています。
この状態では既存レイヤーも追加レイヤーも同じ優先度でポイントされます。
ポインターの優先度を変更する
ポインターの優先度を変更してPriority Layerレイヤーを優先的にポイントするようにします。
掴み操作で利用されるポインターの優先度は[ShellHandRayPointer]の[Pointer Raycast LayerMasks]の設定が参照されます。
ただし本設定は[Default Raycast LayerMasks]の設定を参照するようになっているため、直接編集できない点に注意が必要です。
[Default Raycast LayerMasks]の[+]ボタンを押して項目を追加すると、[ShellHandRayPointer]側の設定も更新されます。
レイヤーの優先度は上から順にチェックが行われます。
[Element 0]のレイヤーをPriority Layerのみに変更することで、Priority Layerを優先的に利用するようになります。
その他のポインター設定についても[Default Raycast LayerMasks]を参照するものは自動で同じ設定に更新されます。
ポインターによっては個別に設定が必要なものもあるので注意してください。
これで設定は完了です。