Unity XR Interaction Toolkit (2) インタラクションを処理する

目次

1.構造構成

2.インタラクティブなイベント

1. イベント設定

2.製本設定

3. コンビネーションキー入力

4. イベントマウント

3. コード応答

1. イベント コールバック

2.価値の獲得


なお、この記事のツールキットのバージョンは 2.2 より上で、それより前のバージョンにはサンプルと一部の API が含まれていません。更新方法は最初の環境構成にあります。

パッケージ マネージャーを開き、右側のパネルの [サンプル] リストをクリックして、スターター アセットをインポートします。

1.構造構成

スターター アセット -> プレハブ -> 完全な XR オリジン セットアップ

これは完全なインタラクティブ プレハブ、セット ピックアップ、インタラクション、テレポーテーション、およびその他の機能を提供する公式ケースです。

(見つからない場合は、将来のバージョンで削除する必要があります。代替品は必ずあるので、大きな問題ではありません)

Input Action Manager : 入力管理

InteractionManager : グラブ インタラクション管理

EventSystem : UI インタラクション管理

XR オリジン

→XRオリジン

→Sanp Turn Provider(アクションベース):クイックターン機能

->移動システム: モバイル伝送管理

→テレポーテーションプロバイダー:テレポーテーション機能

->Continuous Turn Provider: 連続ターン機能

→Dynamic Move Provider:連続移動機能

->Two-Handed Grab Move Provider: 両手グラブムーブプロバイダー

左手

->Action Based Controller Manager: コリジョン キャプチャ、レイ キャプチャ、レイ トランスミッションの切り替え管理

->XR Controller (Action-based): ハンドル コントローラーの変位と角度を同期し、コントローラー イベントにバインドして応答します。

Direct Interactor : 衝突グラビング

Ray Interactor : レイ グラビング

->XR レイインタラクター: レイインタラクター

->Line Renderer: 光線コンポーネントを描画

->XR Interactor Line Visual: レイ コンポーネント設定コンポーネントは、Line Renderer パラメータをオーバーライドします。

->ソートグループ: ソートグループ

テレポートインタラクター: レイテレポートインタラクター

->XR Ray Interactor: Ray Interactor、ここで光線のスタイルを設定できます

->Line Renderer: 光線コンポーネントを描画

->XR Interactor Line Visual: レイ コンポーネント設定コンポーネントは、Line Renderer パラメータをオーバーライドします。

->ソートグループ: ソートグループ

→XRコントローラー(アクションベース):送信開始イベントに応答し、Select ActionとSelect Action Valueのみバインド

2.インタラクティブなイベント

スターター アセット -> XRI デフォルト入力アクション

公式のデフォルト XR 入力イベント

Toolkit の入力イベントは入力システムによって処理され、ハンドルのすべてのボタンがここで変更されます

これは、構成ファイル (右ボタン -> [作成] -> [入力アクション])、結合されたキー入力イベント、およびこのイベントに応答してロジック編集を完了することによる、入力システムの新しいバージョンです。

利点は入力イベントを一律に変更できることで、例えばグラブ機能をサイドボタンからトリガーボタンに変更したい場合、コード内でいちいち変更するのではなく、設定ファイルを変更するだけで済みます.

図1に示すように

  • 左端の黄色のヘッダーはイベント カテゴリです.XRI LeftHand Interaction を例にとると、サブ項目はすべてインタラクティブ イベントであり、XRI LeftHand Locomotion はすべてモバイル通信イベントです.
  • 真ん中の緑のヘッダーが対応するイベント. 1つのイベントを複数の入力にバインドできます. キャプチャイベントのSelectなど, サイドキーをバインドできます.トリガーキーもバインドできます. 図のキャプチャイベントがバインドされています.トリガー (トリガー) と空の入力
  • 右側がイベントのレスポンスメソッドで、図ではボタン型のAntition Typeがあり、トリガーすると1回だけ反応し、パラメータはありません。

1. イベント設定

開発過程では様々な要件があり、それを実現するインプットシステムですが、まずは追加するイベントを設定する必要があります。

アクションタイプ

バインディングの追加: 単一の値であり、シンプルでシンプルです。

Positive\Negative Binding の追加: 軸に似た正と負の値

1 つの修飾子でバインドを追加: 組み合わせたボタン、2 つのボタンを組み合わせて、ハンドルのロッカーを前方に押して押すと、この方法で実現できます。その中で、Binding が主な値であり、Modifier は変更の役割のみを果たします。

2 つの修飾子でバインドを追加: 2 つのキーを組み合わせて、3 つのキーを組み合わせて押すことができます

アクションには 3 つのタイプがあります

値: トリガー キーの強さ、連続入力などのパラメーター値を入力できます。値の種類を区別する必要があり、数値、ベクトル、ポーズなどがあります。

ボタン: パラメーターなしで、1 回トリガーされる関数

PassThrough: Value と同様に、Value は 1 つのデバイスにのみ応答し、これはすべてのデバイスに応答します (マウスやジョイスティックと同様)。

相互作用

タイプ Type を選択した後、以下の Ineractions は入力に条件を追加し (長押し、ダブルクリックなど)、図に Hold 条件を追加できます。

プロセッサ

値の処理、値の反転、値の制限など

2.製本設定

注: バインディング パスは、アクション タイプによって異なります. 2D ベクトル バインディングは、ボタン タイプに応答できません。

バインド オプションはここで設定されます。図は 2 次元ベクトル軸です。これは、テレポート レイのアクティブ化 (Teleport Select) が 2 次元ベクトル (Primary2DAxis) によって設定されることを意味します。

左側のハンドルは左の値のみを設定できます。写真は [LeftHand XR Controller] です。

右側のパスをクリックして、このイベントに応答するパスを設定します

ここには多くのオプションがあり、初心者が選択するのは簡単ではありません。一部の値は非常に乱雑に見えるため、現在のデバイス入力をデバッグできるツールを次に示します。パスをバインドできます Window->Analysis ->XR Interaction Debugger の値の変更に応じて、[入力デバイスの選択] オプションにチェックマークを付ける必要があります。また、ここで相互作用するオブジェクトとインタラクターを表示することもできます。

3. コンビネーションキー入力

上記の組み合わせボタンについて述べたので、実際に適用します. 私のデバイスはHTC Viveで、ハンドルはジョイスティックではなくトラッキングパッドです.

まず、これは値型のイベントで、値型は 2 ビットのベクトルです。

変更を追加します。要件はトラッキング ボードのフロント エンドです。この入力は、北フロント エンドとしてセクター エリア (Sector) を決定する必要があります。

キーの組み合わせが trackpadclicked であるため、ハンドル イベントが完了します。

4. イベントマウント

公式ケースで与えられたプレハブはすでにイベントを実装しているので、作成したばかりのイベントを置き換える場合は、名前に従って 1 つずつ置き換えるだけで済みます。

3. コード応答

1. イベント コールバック

2 つのコールバック関数メソッドがあります。つまり、次のとおりです。

// 被动获取值,事件响应

// 
[SerializeField]
InputActionReference m_InputActionReference;

void Start(){
    InputAction inputAction = m_InputActionReference.action;
    inputAction.performed += Callback;
}

void Callback(InputAction.CallbackContext obj){
    var value = obj.ReadValue<int>();
}



// 
[SerializeField]
InputActionProperty m_InputActionProerty;

void Start(){
    InputAction inputAction = m_InputActionProerty.action;
    inputAction.performed += Callback;
}

void Callback(InputAction.CallbackContext obj){
    var value = obj.ReadValue<int>();
}

2.価値の獲得

// 在Update中主动获取值
void Update(){
    InputAction action = m_InputActionProperty.action;
    float value = action.ReadValue<Vector2>();
}

おすすめ

転載: blog.csdn.net/qq_36608844/article/details/128900570