オブジェクト マニピュレーター — MRTK2
ObjectManipulator は操作の動作に関する新しいコンポーネントで、以前は ManipulationHandler にありました。 オブジェクト マニピュレーターでは、さまざまなことが改善されて簡素化されています。 このコンポーネントは、非推奨化される予定の操作ハンドラーに代わるものです。
オブジェクトの移動、拡大縮小、回転が、ObjectManipulator スクリプトによって片手または両手で行えるようになります。 各種の入力に対するオブジェクトの反応を、オブジェクト マニピュレーターの構成を通じて制御することができます。 HoloLens 2 の多関節ハンド、HoloLens 2 のハンド レイ、HoloLens 1 の視線入力とジェスチャー、イマーシブ ヘッドセットのモーション コントローラー入力など、ほとんどの形態の対話式操作でこのスクリプトは動作します。
オブジェクト マニピュレーターの使用方法
オブジェクト マニピュレーターを使用するにはまず、GameObject に ObjectManipulator
スクリプト コンポーネントを追加します。 オブジェクトには、つかむことのできる範囲に合わせて必ず collider も追加してください。
また、近接多関節ハンド入力にオブジェクトが反応するようにするには、NearInteractionGrabbable
スクリプトも追加します。
オブジェクトに Rigidbody コンポーネントを追加することで、オブジェクト マニピュレーターで物理的動作を有効にできます。 このコンポーネントを追加することで可能になる物理的動作については、「物理特性と衝突」で詳しく取り上げています。
加えて、操作制約コンポーネントをオブジェクトに追加することで、操作に制約を与えることもできます。 これらは操作に作用して、なんらかの形で操作の動作を変える特殊なコンポーネントです。
インスペクターのプロパティとフィールド
全般プロパティ
[Host transform](ホスト変換)
操作の対象となるオブジェクト変換。 既定では、コンポーネントのオブジェクトになります。
[Manipulation type](操作の種類)
オブジェクトの操作を片手で行うのか両手で行うのかを指定します。 このプロパティはフラグなので、両方のオプションを選択できます。
- [One handed](片手): 選択した場合、片手での操作が可能になります。
- [Two handed](両手): 選択した場合、両手での操作が可能になります。
[Allow far manipulation](遠隔操作を許可)
ポインターによる遠隔対話を使用して操作を実行できるかどうかを指定します。
片手による操作のプロパティ
[One hand rotation mode near](片手回転モード - 近接)
近くからオブジェクトを片手でつかんだ場合の動作を指定します。 これらのオプションは、多関節ハンドに対してのみ作用します。
- [Rotate about object center](オブジェクトの中心を軸周りに回転): 手の回転を使用し、オブジェクトをその中心点を軸に回転させます。 回転時のオブジェクトの移動は小さくなりますが、手とオブジェクトの間に断絶感があることがあります。 遠隔での対話式操作でより効果的です。
- [Rotate about grab point](把持点を軸周りに回転): 親指と人差し指の間の把持点を中心にオブジェクトが回転します。 オブジェクトを手でつかんでいる感覚になります。
[One hand rotation mode far](片手回転モード - 遠隔)
遠くからオブジェクトを片手でつかんだ場合の動作を指定します。 これらのオプションは、多関節ハンドに対してのみ作用します。
- [Rotate about object center](オブジェクトの中心を軸周りに回転): 手の回転を使用し、オブジェクトをその中心点を軸に回転させます。 回転するオブジェクトの中心を動かすことなく、離れた場所から詳しく眺める場合に適しています。
- [Rotate about grab point](把持点を軸周りに回転): 手の回転を使用し、ポインターの光線が当たった位置を軸にオブジェクトを回転させます。 詳しく眺める用途に適しています。
両手による操作のプロパティ
[Two Handed Manipulation Type](両手の操作タイプ)
両手操作でオブジェクトをどのように変換できるかを指定します。 このプロパティはフラグなので、任意の個数のオプションを選択できます。
- [Move](移動): 選択した場合、移動が許可されます。
- [Scale](拡大縮小): 選択した場合、拡大縮小が許可されます。
- [Rotate](回転): 選択した場合、回転が許可されます。
制約
[Enable constraints](制約の有効化)
この設定により、リンクされた制約マネージャーが有効になります。 選択した制約マネージャーに登録された制約によって、トランスフォームの変更が処理されます。
制約マネージャー
アタッチされているいずれかの制約マネージャーをドロップダウンから選択できます。 制約マネージャーは、オブジェクト マニピュレーターによって常時、確実にアタッチされます。 同じタイプの複数のコンポーネントは、Unity では同じ名前で表示されることに注意してください。 同じオブジェクト上の複数の制約マネージャーを区別しやすくするために、利用可能なオプションには (手動または自動の制約選択によって) 選択された制約マネージャーの構成に関するヒントが表示されます。
[Go to component](コンポーネントに移動)
制約マネージャーの選択肢には、[Go to component](コンポーネントに移動)ボタンが付いています。 このボタンを使用すると、選択したコンポーネントを構成できるように、そこまでインスペクターがスクロールされます。
物理計算
このセクションの設定は、オブジェクトに RigidBody コンポーネントがある場合にのみ表示されます。
[Release behavior](リリース動作)
操作されたオブジェクトがリリースされたときに維持すべき物理的なプロパティを指定します。 このプロパティはフラグなので、両方のオプションを選択できます。
- [Keep Velocity](速度の維持): このオプションが選択されている場合、オブジェクトがリリースされたときにその線速度が維持されます。
- [Keep Angular Velocity](角速度の維持): このオプションが選択されている場合、オブジェクトがリリースされたときにその角速度が維持されます。
[Use forces for near manipulation](近接操作に力を使用する)
近接操作を行う際に物理的な力を使ってオブジェクトを動かすかどうかを指定する。 これを false に設定すると、オブジェクトがユーザーの手に直接接続されているように感じられます。 これを true に設定すると、オブジェクトの質量と慣性は尊重されますが、オブジェクトがバネを介して接続されているように感じられる場合があります。 既定値は false です。
スムージング
[Smoothing far](遠隔スムージング)
遠隔での対話式操作でフレームレートに依存しないスムージングを有効にするかどうかを指定する。 既定では遠隔スムージングが有効です。
[Smoothing near](近接スムージング)
近接での対話式操作でフレームレートに依存しないスムージングを有効にするかどうかを指定する。 近接スムージングは既定では無効になっています。この効果は、手から "切断された" と認識される可能性があるためです。
[Smoothing active](スムージングの有効化)
現在は使用されておらず、今後のバージョンで削除される予定です。 アプリケーションでは、SmoothingFar、SmoothingNear、またはその両者の組み合わせを使用してください。
[Move lerp time](移動の線形補間時間)
移動に適用されるスムージングの量。 スムージング 0 は、スムージングを行わないことを意味します。 最大値は、値が変化しないことを意味します。
[Rotate lerp time](回転の線形補間時間)
回転に適用されるスムージングの量。 スムージング 0 は、スムージングを行わないことを意味します。 最大値は、値が変化しないことを意味します。
[Scale lerp time](拡大縮小の線形補間時間)
拡大縮小に適用されるスムージングの量。 スムージング 0 は、スムージングを行わないことを意味します。 最大値は、値が変化しないことを意味します。
操作イベント
操作ハンドラーには、次のイベントがあります。
- OnManipulationStarted: 操作が開始されたときに発生します。
- OnManipulationEnded: 操作が終了したときに発生します。
- OnHoverStarted: 近くまたは遠隔から手またはコントローラーを操作可能なオブジェクトにホバーしたときに発生します。
- OnHoverEnded: 操作可能なオブジェクトに対して近くまたは遠隔からホバーした手またはコントローラーを離したときに発生します。
操作に関するイベントの発生順序は次のとおりです。
OnHoverStarted ->OnManipulationStarted ->OnManipulationEnded ->OnHoverEnded
操作が行われない場合でも、次の発生順序でホバー イベントを受け取ることができます。
OnHoverStarted ->OnHoverEnded
物理特性と衝突
オブジェクト マニピュレーターと同じオブジェクトに Rigidbody コンポーネントを追加することで、物理的動作を有効にできます。 これによって上記のリリース動作の構成だけでなく、衝突も有効になります。 Rigidbody コンポーネントがないと、操作中に衝突が正しく動作しません。
- 操作されているオブジェクトと静的な collider (collider はあるが Rigidbody はないオブジェクト) との衝突は動作せず、操作されているオブジェクトは影響を受けずに静的な collider をまっすぐ通過します。
- 操作されているオブジェクトと Rigidbody (collider と Rigidbody の両方が追加されたオブジェクト) が衝突した場合、Rigidbody には衝突の反応が起こりますが、その反応は不自然なジャンプになります。 また、操作されているオブジェクトには衝突反応がありません。
Rigidbody が追加されていれば、衝突は正しく動作します。
Rigidbody がない場合
Rigidbody がある場合
Elastics (試験段階)
Elastics は、オブジェクト マニピュレーターを介してオブジェクトを操作するときに使用できます。 Elastics システムはまだ試験段階であることに注意してください。 エラスティックを有効にするには、既存のエラスティック マネージャー コンポーネントをリンクするか、Add Elastics Manager
ボタンを使用して新しいエラスティック マネージャーを作成してリンクします。