本日は MRTKv2 の技術調査枠です。
MRTKv2 を用いて両手でオブジェクトをドラッグ操作する方法を記事にします。
プロジェクトとシーンの準備
最初に、以下の記事を参考にプロジェクトのシーンを構築します。
bluebirdofoz.hatenablog.com
「サンプルシーンの作成」まで実施し、以下の Cube オブジェクトが配置されたシーンを準備します。
ManipulationHandlerの追加
ドラッグ操作を行いたいオブジェクトを選択し、Inspector ビューを開きます。
オブジェクトに Collider が設定されていることを確認します。
オブジェクトの[Add Component]を開き、[ManipulationHandler]コンポーネントを検索して選択します。
以下の通り、[ManipulationHandler]コンポーネントが追加されました。
[再生]ボタンをクリックして、動作を確認してみます。
シーン内でオブジェクトにカーソルを合わせ、タップとドラッグ操作を行うとオブジェクトが操作できます。
ManipulationHandlerのプロパティ
ManipulationHandlerのプロパティでそれぞれ以下の設定が変更できます。
Host Transform
ドラッグ操作でトランスフォームが変化するオブジェクトを指定できます。
デフォルトでは[None(Transform]で、この場合、[ManipulationHandler]をアタッチしたオブジェクト自体が動きます。
Manipulation Type
オブジェクトを片手、両手、または両方で操作できるかどうかを指定します。
One Handed Only | 片手のみ |
---|---|
Two Handed Only | 両手のみ |
One And Two Handed | 片手と両手 |
Two Handed Manipulation Type
両手操作で変化させるトランスフォームの項目を指定します。
Scale | スケーリングのみ許可 |
---|---|
Rotate | 回転のみ許可 |
Move Scale | 移動とスケーリングを許可 |
Move Rotate | 移動と回転を許可 |
Rotate Scale | 回転とスケーリングを許可 |
Move Rotate Scale | 移動、回転、スケーリング全てを許可 |
Allow Far Manipulation
ポインターでの遠隔操作を使用して操作を実行できるかどうかを指定します。
One Hand Rotation Mode Near と One Hand Rotation Mode Far
片手で近くまたは遠くのオブジェクトをつかんだときのオブジェクトの回転動作を指定します。
デフォルトでは[Rotate About Grab Point]で、この場合、移動時にオブジェクトが手の方向を向き続けるように回転します。
回転させたくない場合は[Maintain Original Rotation]を選択します。
Maintain original rotation | オブジェクトは移動中に回転しません |
---|---|
Maintain rotation to user | ユーザーに対するX/Y軸のオブジェクトの元の回転を維持します |
Gravity aligned maintain rotation to user | オブジェクトの元の回転をユーザーに対して維持しますが、オブジェクトを垂直にします。バウンディングボックスに適しています |
Face user | オブジェクトが常にユーザーに向くようにします。平面パネルに適しています |
Face away from user | オブジェクトが常にユーザーの反対側を向くようにします。前後逆に構成された平面パネルに適しています |
Rotate about object center | 関節式の手/コントローラーでのみ機能します。手/コントローラーの回転を使用して、オブジェクトの中心点を中心にオブジェクトを回転します |
Rotate about grab point | 関節式の手/コントローラーでのみ機能します。手/コントローラで保持されているかのようにオブジェクトを回転させます |
Release Behavior
オブジェクトがリリースされたときの物理的な動きの動作を指定します。
オブジェクト上に[rigidbody]コンポーネントが必要です。
Nothing | なし |
---|---|
Keep Velocity | 速度を維持する |
Keep Angular Velocity | 各速度を維持する |
Everything | 全て維持する |
Constraints on Rotation
相互作用時にオブジェクトが回転する軸を指定します。
None | 指定なし |
---|---|
X-Axis Only | X軸 |
Y-Axis Only | Y軸 |
Z-Axis Only | Z軸 |
Constraints on Movement
相互作用時にオブジェクトが移動する距離を指定します。
None | 指定なし |
---|---|
Fix distance from head | 頭からの距離を維持する |
Smoothing Active
動き、スケール、回転操作のスムージング処理が有効化かを指定します
Smoothing Amount One Hand
動き、スケール、回転に適用するスムージングの量を指定します。
スムージングが0の場合、スムージングは行われません。最大値は値が変更しないことを意味します。
Manipulation Events
操作ハンドラーは、次のイベントを提供します。
OnManipulationStarted | 操作が開始されると発生します |
---|---|
OnManipulationEnded | 操作が終了すると起動します |
OnHoverStarted | 手/コントローラーが操作可能に近づいたり遠ざかったりすると起動します |
OnHoverEnded | 手/コントローラーが操作可能、近くまたは遠くに離れたときに発生します |
スケールの最小値または最大値を設定する
オブジェクトのスケールの最小値または最大値を設定する場合は[TransformScaleHandler]コンポーネントを追加します。
プロパティの設定値はスケールの絶対値ではなく倍率になります。
Target Transform
スケールの制限をかけるオブジェクトを指定できます。
デフォルトでは[None(Transform]で、この場合、[TransformScaleHandler]をアタッチしたオブジェクト自体が動きます。
Scale Minimum
スケールの最小値を定義します。
Scale Maximum
スケールの最大値を定義します。
Relative To Initial State
チェック時、設定値をオブジェクトの初期スケールに対して相対的な値として扱います。
チェックしない場合、設定値はスケールの絶対値として扱われます。