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

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

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

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

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

オブジェクト マニピュレーターを使用するには、まず ObjectManipulator スクリプト コンポーネントを GameObject に追加します。 また、そのつかみ取り可能な境界に一致するコライダーもオブジェクトに追加してください。

オブジェクトが近い多関節ハンド入力に応答できるようにするには、 NearInteractionGrabbable スクリプトも追加します。

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

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

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

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

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

全般プロパティ

ホスト変換

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

操作の種類

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

  • 片手: 選択した場合に片手操作を有効にします。
  • 片手: 選択した場合に 2 つの手操作を有効にします。

遠距離操作を許可する

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

片手操作プロパティ

片手回転モードの近く

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

  • オブジェクトの中心を中心に回転: オブジェクトは手の回転を使用して回転しますが、オブジェクトの中心点を中心に回転します。 オブジェクトは回転すると動きが減るように見えますが、手とオブジェクトの間に切断感がある可能性があります。 遠い相互作用に役立ちます。
  • グラブポイントを中心に回転する: 手で親指と人差し指の間のグラブポイントを中心にオブジェクトを回転させます。 オブジェクトが手で保持されているかのように感じるはずです。

片手回転モード遠く

オブジェクトが片手で遠く離れた位置でつかまれている場合の動作を指定します。 これらのオプションは、多関節ハンドでのみ機能します。

  • オブジェクトの中心を中心に回転する: 手の回転を使用してオブジェクトを回転しますが、オブジェクトの中心点を中心に回転します。 オブジェクトが回転する際に、オブジェクトの中心が動かなくても、遠くで検査する場合に便利です。
  • グラブポイントを中心に回転: 手の回転を使用してオブジェクトを回転しますが、ポインターレイヒットポイントを中心に回転します。 検査に便利です。

2 つの手操作プロパティ

2 つの手操作の種類

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

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

操作ハンドラー

制約

制約を有効にする

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

制約マネージャー

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

コンポーネントに移動する

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

物理学

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

リリース動作

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

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

近くの操作にフォースを使用する

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

スムージング

遠方のスムージング

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

スムージングの近く

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

スムージングアクティブ

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

lerp 時間を移動する

移動に適用するスムージングの量。 0 のスムージングは、スムージングを行いません。 最大値は、値に変更がないことを意味します。

リープ時間を回転させる

回転に適用するスムージングの量。 0 のスムージングは、スムージングを行いません。 最大値は、値に変更がないことを意味します。

lerp 時間をスケーリングする

スケールに適用するスムージングの量。 0 のスムージングは、スムージングを行いません。 最大値は、値に変更がないことを意味します。

操作イベント

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

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

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

OnHoverStarted ->OnManipulationStarted ->OnManipulationEnded ->OnHoverEnded

操作がない場合でも、次の火災順序でホバー イベントが発生します。

OnHoverStarted ->OnHoverEnded

物理と衝突

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

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

剛体を追加すると、衝突が正しく機能します。

rigidbody なし

剛体なし

rigidbody を使用する

剛体

Elastics (試験段階)

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

境界コントロール エラスティック

関連項目