次の方法で共有


Unityの入力移植ガイド

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

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

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

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

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

重要

HP Reverb G2 コントローラーを使用する場合は、Unityの HP Reverb G2 コントローラーに関するページを参照してください。

XR 入力 API

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

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

注:

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を渡します。

関連項目