Unity 用入力移植ガイド

次の 2 つの方法のいずれかを使用して、入力ロジックをWindows Mixed Realityに移植できます。

  • 複数のプラットフォームにまたがる Unity の一般的な Input.GetButton API または Input.GetAxis API。
  • UnityEngine.XRModule API。モーション コントローラーと HoloLens の手専用の豊富なデータを提供します。

一般的な Input.GetButton と Input.GetAxis API

Unity では現在、一般的な Input.GetButton API と Input.GetAxis API を使用して 、Oculus SDKOpenVR SDK の入力を公開しています。 アプリで入力にこれらの API が既に使用されている場合、これらの API は、Windows Mixed Realityでモーション コントローラーをサポートするための最も簡単なパスです。 入力マネージャーでボタンと軸を再マップするだけで済みます。

詳細については、 Unity ボタン/軸マッピング の表、一般的な Unity API の概要に関するページを参照してください。

重要

HP Reverb G2 コントローラーを使用する場合は、 Unity の HP Reverb G2 コントローラーに 関するページで、入力マッピングの手順を参照してください。

XR 入力 API

Unity リリースでは、XR が段階的に廃止されました 。XR SDK を優先する WSA API 。 新しいプロジェクトの場合は、最初から XR 入力 API を使用することをお勧めします。 詳細については、「 Unity XR Input」を参照してください。

アプリで各プラットフォームのカスタム入力ロジックが既にビルドされている場合は、 UnityEngine.InputSystem.XR 名前空間で Windows 固有の空間入力 API を使用できます。 これらの API を使用すると、位置の精度やソースの種類などの詳細情報にアクセスして、HoloLens で手とコントローラーを区別することができます。

Note

HP Reverb G2 コントローラーを使用すると、 を除く InteractionSource.supportsTouchpadすべての入力 API が引き続き機能します。これは、タッチパッド データなしで false を返します。

グリップの姿勢とポインターの姿勢

Windows Mixed Realityでは、さまざまなフォーム ファクターのモーション コントローラーがサポートされます。 各コントローラーの設計は、ユーザーの手の位置と、コントローラーのレンダリング時にアプリがポイントに使用する自然な前方方向との関係で異なります。

これらのコントローラーをより適切に表現するために、相互作用ソース、 グリップ ポーズ 、ポインターの姿勢ごとに 2 種類の ポーズを調査できます。 すべてのポーズ座標を Unity ワールド座標で表現します。

グリップ姿勢

グリップ姿勢は、HoloLens によって検出された手のひら、またはモーション コントローラーを持つ手のひらの位置を表します。 イマーシブ ヘッドセットでは、このポーズを使用して、ユーザーの手や、剣や銃など、ユーザーの手に保持されているオブジェクトをレンダリングします。

  • グリップ位置は、コントローラーを自然に保持するときの手のひらの重心で、グリップ内の位置を中央にするように左右に調整されます。
  • グリップの向きの右軸は、手を完全に開いて平らな 5 本指のポーズを形成する場合に、手のひらから前方、右の手のひらから後方に、手のひらに対して正常なレイです。
  • グリップの向きの前方軸は、コントローラーを保持しているかのように手を部分的に閉じるときに、親指以外の指で形成されたチューブを前方に向くレイです。
  • グリップの向きの上軸は、右方向と前方の定義で示される上軸です。

Unity の XR を使用してグリップ ポーズにアクセスします 。InputTracking.GetNodeStates API ( XRNodeState.TryGetPositionXRNodeState.TryGetRotation など)。

ポインター姿勢

ポインター姿勢は、前方を指しているコントローラーの先端を表します。 このポーズは、コントローラー モデル自体をレンダリングするときに UI をポイントするレイ キャストに最適です。

ポインターのポーズは、Windows MR 固有の API sourceState.sourcePose.TryGetPosition/Rotationを介してのみ Unity で使用できます。引数として を渡します InteractionSourceNode.Pointer

関連項目