オブジェクト マニピュレーター

オブジェクト マニピュレーター

ObjectManipulator は、 操作動作の新しいコンポーネントで、以前は ManipulationHandler で見つかりました。 オブジェクト マニピュレーターは、多くの機能強化と簡略化を行います。 このコンポーネントは、非推奨となる操作ハンドラーの代わりのコンポーネントです。

ObjectManipulator スクリプトを使用 すると、オブジェクトは 1 手または 2 手で移動可能、スケーラブル、回転可能になります。 オブジェクト マニピュレーターは、オブジェクトがさまざまな入力に応答する方法を制御するように構成できます。 このスクリプトは、HoloLens 2 多関節ハンド、HoloLens 2 ハンド レイ、HoloLens 1 の視線入力とジェスチャ、イマーシブ ヘッドセット モーション コントローラー入力など、ほとんどの形式の操作で動作する必要があります。

オブジェクト マニピュレーターの使い方

オブジェクト マニピュレーターを使用するには、最初にスクリプト ObjectManipulator コンポーネントを GameObject に追加します。 また、オブジェクトにコライダーを追加し、そのグラブ可能な境界と一致させる必要があります。

オブジェクトがほぼ多関節の手入力に応答するには、スクリプト NearInteractionGrabbable も追加します。

物理動作は、オブジェクトに固定体コンポーネントを追加することで、オブジェクト マニピュレーターに対して有効にできます。 このコンポーネントを追加することで実現される物理動作については、「物理と衝突」 で詳しく説明します

また、操作制約コンポーネントを オブジェクトに追加することで、操作 制限できます。 これらは、操作を操作し、何らかの方法で操作動作を変更する特殊なコンポーネントです。

Unity エディターでの操作ハンドラーの使用

インスペクターのプロパティとフィールド

Object Manipulator Structure

全般プロパティ

ホスト変換

操作されるオブジェクト変換。 既定値は コンポーネントの オブジェクトです。

操作の種類

オブジェクトを一手または両手で操作できるかどうかを指定します。 このプロパティはフラグなので、両方のオプションを選択できます。

  • [One handed]/( 手渡し)]: 選択されている場合は、ハンド操作を 1 回有効にできます。
  • [Two handed]/( 手渡し):選択した場合、2 つのハンド操作を有効にします。

遠くから操作を許可する

ポインターとの遠い相互作用を使用して操作を実行できるかどうかを指定します。

1 つのハンド操作プロパティ

近くの手の回転モード

オブジェクトが手の近くでつかむときにどのように動作するのかを指定します。 これらのオプションは、多関節ハンドでのみ機能します。

  • オブジェクトの中心を中心に 回転: オブジェクトは手の回転を使用して回転しますが、オブジェクトの中心点を中心に回転します。 オブジェクトは回転するほど動きが少なく見えるが、手とオブジェクトの間に切断感がある可能性がある。 遠く離れた操作に役立ちます。
  • グラブ ポイントを中心に 回転する: 親指と人差し指の間のグラブ ポイントを中心に、手でオブジェクトを回転させます。 オブジェクトが手で保持されている場合のように感じる必要があります。

遠く離れた方の手の回転モード

遠くで手をつかむときにオブジェクトがどのように動作するのかを指定します。 これらのオプションは、多関節ハンドでのみ機能します。

  • オブジェクトの中心を中心に 回転する: 手の回転を使用してオブジェクトを回転させますが、オブジェクトの中心点を中心に回転します。 オブジェクトの回転に合ってオブジェクトの中心を移動せずに、遠くで検査する場合に便利です。
  • グラブ ポイントを中心に 回転する: 手の回転を使用してオブジェクトを回転させますが、ポインターの光線ヒット ポイントを中心に回転します。 検査に役立ちます。

2 つのハンド操作プロパティ

2 つのハンド操作の種類

2 つの手操作でオブジェクトを変換する方法を指定します。 このプロパティはフラグなので、任意の数のオプションを選択できます。

  • 移動: 選択した場合、移動が許可されます。
  • スケール: 選択した場合、スケーリングが許可されます。
  • 回転: 選択した場合、回転は許可されます。

操作ハンドラー

制約

制約を有効にする

この設定により、リンク制約マネージャー が 有効になります。 変換の変更は、選択した制約マネージャー に登録されている制約によって 処理されます

制約マネージャー

ドロップダウンでは、アタッチされている制約マネージャーを 選択できます。 オブジェクト マニピュレーターにより、制約マネージャー 必ずアタッチされます。 同じ型の複数のコンポーネントが、unity の同じ名前の下に表示されます。 同じオブジェクト上の複数の制約マネージャーを区別しやすくするために、使用可能なオプションでは、選択した制約マネージャーの構成に関するヒントが表示されます (手動または自動制約の選択)。

コンポーネントに移動

制約マネージャーの選択には、[コンポーネントに移動 ] ボタンが付属 しています。 このボタンをクリックすると、インスペクターは選択したコンポーネントまでスクロールして構成できます。

物理計算

設定、オブジェクトに RigidBody コンポーネントがある場合にのみ表示されます。

リリース動作

操作されたオブジェクトがリリース時に保持する必要がある物理プロパティを指定します。 このプロパティはフラグなので、両方のオプションを選択できます。

  • [速度を維持 する]: オブジェクトが解放されると、このオプションを選択すると、線形速度が維持されます。
  • [Angularベロシティ を維持する: オブジェクトが解放されると、このオプションを選択すると、その角速度が維持されます。

近い操作に力を使用する

近い操作を実行するときに、物理力を使用してオブジェクトを移動するかどうか。 これを false に 設定 すると、オブジェクトはユーザーの手に直接接続された感じになります。 これを true に 設定すると 、オブジェクトの量と慣性が受け入れされますが、オブジェクトが Spring を介して接続されている場合のように感じる場合があります。 既定値は false です。

スムージング

スムージング遠く

遠い相互作用に対してフレームレートの独立したスムージングが有効になっているかどうか。 既定では、遠いスムージングが有効になっています。

近くのスムージング

フレームレートに依存しないスムージングが、ほぼ相互作用に対して有効になっているかどうか。 近いスムージングは、効果が手から "切断" と認識される可能性があるという理由で、既定では無効になっています。

アクティブなスムージング

廃止され、今後のバージョンでは削除される予定です。 アプリケーションでは、SmoothingFar、SmoothingNear、または 2 つの組み合わせを使用する必要があります。

移動時間

移動に適用するスムージングの量。 0 のスムージングは、スムージングを意味します。 最大値は、値に変更が生じない場合を意味します。

回転時間

回転に適用するスムージングの量。 0 のスムージングは、スムージングを意味します。 最大値は、値に変更が生じない場合を意味します。

スケール ルプ時間

スケールに適用するスムージングの量。 0 のスムージングは、スムージングを意味します。 最大値は、値に変更が生じない場合を意味します。

操作イベント

操作ハンドラーは、次のイベントを提供します。

  • OnManipulationStarted: 操作の開始時に発生します。
  • OnManipulationEnded: 操作が終了すると起動します。
  • OnHoverStarted: 手/コントローラーが操作可能な、近い、または遠くにマウス ポインターを置くと起動します。
  • OnHoverEnded: 手/コントローラーが操作可能な、近い、または遠くにホバーを解除すると発生します。

操作のイベントの発生順序は次です。

OnHoverStarted -> OnManipulationStarted -> OnManipulationEnded -> OnHoverEnded

操作がない場合でも、次の火災の順序でホバー イベントが表示されます。

OnHoverStarted -> OnHoverEnded

物理と衝突

物理動作は、オブジェクト マニピュレーターと同じオブジェクトに固定体コンポーネントを追加することで有効にできます。 これにより、上記のリリース動作の構成 可能であるだけでなく、競合も可能です。 固定体コンポーネントがない場合、操作中に競合が正しく動作しません。

  • 操作されたオブジェクトと静的コライダー (つまり、コライダーを持つが、固定体がないオブジェクト) の間の衝突は機能しません。操作されたオブジェクトは、影響を受けずに静的コライダーを直接通過します。
  • 操作されたオブジェクトと固定体の間の競合 (つまり、 コライダーと固定体の両方を持つオブジェクト) では、固定体に衝突応答が発生しますが、応答はジャンプ的で不自然です。 また、操作されたオブジェクトに対する競合応答はありません。

固定体が追加された場合、競合は正しく機能するはずです。

固定体を使用しない

No Rigid Body

固定体を使用する

Rigid Body

エラスティック (試験段階)

エラスティックは、オブジェクト マニピュレーターを介してオブジェクトを操作するときに使用できます。 エラスティック システムはまだ試験的 な状態です。 エラスティックを有効にするには、既存のエラスティック マネージャー コンポーネントをリンクするか、ボタンを使用して新しいエラスティック マネージャーを作成してリンク Add Elastics Manager します。

Bounds Control Elastics

こちらもご覧ください