モーション コントローラー
モーション コントローラーは、ユーザーが Mixed Reality でアクションを実行できるハードウェア アクセサリです。
ジェスチャに対するモーション コントローラーの利点は、コントローラーでは空間内の位置が正確になるため、デジタル オブジェクトのきめの細かい対話式操作ができることです。 Windows Mixed Reality イマーシブ ヘッドセットの場合、ユーザーが自分の世界でアクションを実行するための主な方法は、モーション コントローラーになります。
画像: Windows Mixed Reality モーション コントローラー
デバイス サポート
機能 | HoloLens (第 1 世代) | HoloLens 2 | イマーシブ ヘッドセット |
モーション コントローラー | ❌ | ❌ | ✔️ |
ハードウェアの詳細
Windows Mixed Reality のモーション コントローラーには、イマーシブ ヘッドセットのセンサーを使用した、正確で応答性の高い視野内での移動追跡機能があります。 空間の壁にハードウェアを取り付ける必要はありません。 これらのモーション コントローラーには、Windows Mixed Reality イマーシブ ヘッドセットと同様の簡単なセットアップと移植性が備わる予定です。 デバイス パートナーは、この休日にこれらのコントローラーを小売店で販売する予定です。
コントローラーについて理解する
機能:
- 光学式の追跡
- トリガー
- グラブ ボタン
- サムスティック
- Touchpad
セットアップ
開始する前に
要件:
- 2 つのモーション コントローラーのセット。
- 4 つの単 3 電池。
- Bluetooth 4.0 がサポートされている PC。
Windows、Unity、ドライバーの更新プログラムを確認する
- Mixed Reality 開発に適した Windows や Unity などのバージョンについては、「ツールのインストール」を参照してください。
- 最新のヘッドセットとモーション コントローラーのドライバーがあることを確認します。
コントローラーのペアリング
モーション コントローラーは他の Bluetooth デバイスと同じように、Windows 設定を使用してホスト PC と結合できます。
- 2 つの単 3 電池をコントローラーの背面に挿入します。 バッテリー カバーは外したままにします。
- 内蔵型の Bluetooth 無線ではなく外付けの USB Bluetooth アダプターを使用している場合は、先に進む前に Bluetooth のベスト プラクティスを確認してください。 内蔵型の無線を使用したデスクトップ構成の場合は、アンテナが接続されていることを確認します。
- [Windows 設定] ->[デバイス] ->[Bluetooth またはその他のデバイスを追加する] ->[Bluetooth] を開き、[モーション コントローラー – 右] および [モーション コントローラー – 左] の古い項目がある場合は削除します。 一覧の下部にある [その他のデバイス] カテゴリも確認します。
- [Bluetooth またはその他のデバイスを追加する] を選択すると、Bluetooth デバイスの検出が開始されます。
- コントローラーの [Windows] ボタンを長押ししてコントローラーをオンにし、振動したらボタンを放します。
- ペアリング ボタン (バッテリー収納部の内部の突起) を長押しすると、LED が点滅し始めます。
- 一覧の一番下に [モーション コントローラー – 左] または [モーション コントローラー – 右] と表示されるまで待機します。 ペアリングする方を選びます。 接続すると、コントローラーは 1 回振動します。
画像: ペアリングする "モーション コントローラー" を選びます。複数の項目がある場合は、一覧の一番下にあるものを選びます
- [ マウス、キーボード、& ペン] カテゴリ の [Bluetooth 設定] に [ 接続済み] としてコントローラーが表示されます。 この時点で、ファームウェアの更新プログラムを入手できます。次のセクションを参照してください。
- バッテリー カバーを再び取り付けます。
- 2 番目のコントローラーに対して手順 1 から 9 を繰り返します。
両方のコントローラーのペアリングが正常に完了すると、"マウス、キーボード、ペン &" カテゴリの下の設定は次のようになります。
画像: 接続されたモーション コントローラー
ペアリング後にコントローラーをオフにした場合、それらの状態は [ペアリング済み] として表示されます。 コントローラーが [その他のデバイス] カテゴリの下に表示されたままの場合、ペアリングが部分的にしか完了していない可能性があります。 この場合は、ペアリング手順をもう一度実行して、コントローラーが機能するようにしてください。
コントローラーのファームウェアの更新
- コントローラーの新しいファームウェアが入手可能な状態のときにイマーシブ ヘッドセットが PC に接続されている場合、モーション コントローラーの電源をオンにしたときに、そのファームウェアがモーション コントローラーに自動的にプッシュされます。 コントローラーのファームウェアの更新は、LED が円を描くように点灯するパターンによって示され、1 から 2 分かかります。
- ファームウェアの更新が完了すると、コントローラーが再起動して再接続します。 このとき両方のコントローラーが接続されている必要があります。
画像: Bluetooth の設定で接続済みのコントローラー
- コントローラーが正常に動作することを確認します。
- [Mixed Reality ポータル] を起動し、[Mixed Reality ホーム] に移動します。
- コントローラーを動かし、追跡、テスト ボタン、テレポートの機能を確認します。 機能しない場合は、モーション コントローラーのトラブルシューティングに関する記事を参照してください。
視線入力とポイント
Windows Mixed Reality では、視線入力とコミットおよびポイントとコミットという 2 つの主要な対話式操作のモデルがサポートされています。
- 視線入力とコミットでは、ユーザーは見つめる動作でオブジェクトを対象に定め、手によるエアタップ、ゲームパッド、クリッカー、または音声でオブジェクトを選びます。
- ポイントとコミットでは、ユーザーはポイントに対応したモーション コントローラーを対象のオブジェクトに向け、コントローラーのトリガーでオブジェクトを選ぶことができます。
また、モーション コントローラーを使用したポイントをサポートするアプリでは、ユーザーが使用する入力デバイスを選択できるようにするために、可能な場合は視線入力で駆動する対話式操作もできるようにする必要があります。
ポイント時の反動の管理
モーション コントローラーを使用してポイントとコミットを行う場合、ユーザーはコントローラーを使用して対象を定め、トリガーを引くことによって対話式操作を行います。 ユーザーがトリガーを強く引くと、トリガーを引き終わったときに、意図したよりもコントローラーの狙いが高くなる場合があります。
ユーザーがトリガーを引いたときに起こりうるそのような反動を管理するために、トリガーのアナログ軸の値が 0.0 より高くなるときに、アプリでターゲット光線をスナップできます。 最後の押し込む操作が短期間で実行される限り、トリガー値が 1.0 になると、2 から 3 フレーム後にそのターゲット光線を使用してアクションを実行できます。 高度な複合タップ ジェスチャを使用するとき、このターゲット光線の取得とタイムアウトは Windows によって自動的に管理されます。
グリップ姿勢とポイント姿勢
Windows Mixed Reality では、さまざまなフォーム ファクターのモーション コントローラーがサポートされていますが、各コントローラーの設計では、ユーザーの手の位置と、コントローラーをレンダリングするときにポイントするためにアプリで使用される自然な "前" の方向との関係が異なっています。
これらのコントローラーをより適切に表現するために、対話式操作の情報源ごとに調査できるグリップ姿勢とポインター姿勢という 2 種類の姿勢があります。
グリップ姿勢
グリップ姿勢は、HoloLens によって検出された手のひら、またはモーション コントローラーを持つ手のひらの位置を表します。
イマーシブ ヘッドセットでは、グリップ姿勢は、ユーザーの手や、剣や銃などのユーザーが手に持っているオブジェクトをレンダリングするのに最適です。 グリップ姿勢はモーション コントローラーを視覚化するときにも使用されます。これは、モーション コントローラー用に Windows によって提供されるレンダリング可能なモデルでは、グリップ姿勢がその原点および回転の中心として使用されるためです。
グリップ姿勢は次のように明確に定義されます。
- グリップ位置: コントローラーを自然に持ったときの手のひらの重心。グリップ内で位置を中央に合わせるために左または右に調整されます。 Windows Mixed Reality のモーション コントローラーでは、この位置は通常、つかむボタンに合わせて調整されます。
- グリップの向きの右方向の軸: 手を完全に開いて 5 本の指が平面になる姿勢をとったときの手のひらに垂直な光線 (左手の手のひらからは前向き、右手の手のひらからは後ろ向き)
- グリップの向きの前方向の軸: (コントローラーを持つように) 手を部分的に閉じたとき、親指以外の指で形成される筒形を通って "前方" をポイントする光線。
- グリップの向きの上方向の軸: 「右」と「前」の定義から暗黙的に指定される上方向の軸。
ポインター姿勢
ポインター姿勢は、前方を指しているコントローラーの先端を表します。
システムで提供されているポインター姿勢は、コントローラー モデル自体をレンダリングするときにレイキャストに最もよく使用されます。 コントローラーの代わりに、仮想的な銃など他の仮想オブジェクトをレンダリングする場合は、その仮想オブジェクトの最も自然な光線でポイントする必要があります (たとえば、アプリ定義の銃モデルの銃身に沿って進む光線など)。 ユーザーは物理コントローラーではなく仮想オブジェクトを見ることができるため、アプリを使用する人にとっては仮想オブジェクトでポイントする方がおそらく自然になります。
コントローラーの追跡状態
ヘッドセットと同様に、Windows Mixed Reality モーション コントローラーでは、外付けの追跡センサーをセットアップする必要がありません。 代わりに、コントローラーはヘッドセット自体のセンサーによって追跡されます。
ユーザーがコントローラーをヘッドセットの視野の外に動かすと、ほとんどの場合、Windows では引き続きコントローラーの位置が推測され、その位置がアプリに提供されます。 コントローラーで視覚的な追跡ができない時間が非常に長くなると、コントローラーの位置は近似精度の位置に低下します。
この時点で、システムはユーザーに対してコントローラーの本体ロックを行い、移動中のユーザーの位置を追跡しながら、引き続きコントローラーの内蔵方位センサーを使用して、コントローラーの正しい向きを公開します。 コントローラーを使用して UI 要素をポイントし、アクティブ化する多くのアプリは、ユーザーが気付かないまま近似精度になっても正常に動作できます。
状態を明示的に追跡する理由
追跡状態に基づいて異なる方法で位置を処理するアプリでは、SourceLossRisk や PositionAccuracy など、コントローラーの状態のプロパティの検査まで行うことができます。
追跡状態 | SourceLossRisk | PositionAccuracy | TryGetPosition |
---|---|---|---|
高精度 | < 1.0 | 高 | true |
高精度 (失うリスクあり) | == 1.0 | 高 | true |
近似精度 | == 1.0 | Approximate | true |
位置なし | == 1.0 | Approximate | false |
これらのモーション コントローラーの追跡状態は、次のように定義されます。
- 高精度: モーション コントローラーがヘッドセットの視野内にあるときは、視覚的な追跡に基づいて、一般的に高精度の位置が提供されます。 移動中のコントローラーがヘッドセット センサーの視野から一瞬出たり、(たとえば、ユーザーの他方の手によって) 一瞬遮られたりしても、コントローラー自体の慣性追跡に基づいて、引き続き高精度の姿勢に短時間で戻ります。
- 高精度 (失うリスクあり): ユーザーがヘッドセットの視野の端を越えてモーション コントローラーを動かすと、ヘッドセットはまもなくコントローラーの位置を視覚的に追跡できなくなります。 アプリでは、SourceLossRisk が 1.0 に達するのを確認することによって、コントローラーがこの視野の境界にいつ達したか認識できます。 アプリでは、その時点で、高品質の姿勢情報が途切れず流れる必要があるコントローラー ジェスチャを一時停止させることができます。
- 近似精度: コントローラーで視覚的な追跡ができない時間が非常に長くなると、コントローラーの位置は近似精度の位置に低下します。 この時点で、システムはユーザーに対してコントローラーの本体ロックを行い、移動中のユーザーの位置を追跡しながら、引き続きコントローラーの内蔵方位センサーを使用して、コントローラーの正しい向きを公開します。 コントローラーを使用して UI 要素をポイントし、アクティブ化する多くのアプリは、ユーザーが気付かないまま近似精度になっても正常に動作できます。 入力要件がさらに厳しいアプリでは、PositionAccuracy プロパティを検査することで、高精度から近似精度へのこの低下を検出できます。たとえば、この期間中に、画面外のターゲットに対するより大きいヒットボックスをユーザーに提供するために、これを行います。
- 位置なし: コントローラーは近似精度で長時間動作できますが、本体ロックが行われた位置でさえ、現時点では意味がないとシステムが認識する場合があります。 たとえば、電源がオンにされたコントローラーが視覚的に観察されたことがない場合や、ユーザーが下に置いたコントローラーを別の誰かが拾った場合などです。 このような場合、システムはアプリに位置情報を提供せず、TryGetPosition で false が返されます。
対話式操作: 低レベルの空間入力
手とモーション コントローラーの間の主な対話式操作は、選択、メニュー、つかむ、タッチパッド、サムスティック、ホームです。
- 選択は、ホログラムをアクティブ化するための主要な対話式操作で、押して放す操作です。 モーション コントローラーでは、コントローラーのトリガーを使用して、選択の押す操作を実行します。 選択を実行するその他の方法は、音声コマンドで "Select" と言う方法です。 同じような選択の対話式操作は、任意のアプリ内で使用できます。 選択はマウス クリックと同等と考えてください。いったん覚えれば、すべてのアプリに適用できるユニバーサル アクションです。
- メニューはオブジェクトを操作するための 2 番目の対話式操作で、コンテキスト メニューを表示したり、他の 2 次的なアクションを実行したりするために使用されます。 モーション コントローラーでは、コントローラーの "メニュー" ボタンを使用してメニュー アクションを実行できます。 (つまり、ハンバーガーの "メニュー" アイコンが付いているボタンです)
- つかむは、ユーザーがオブジェクトに対して手で直接アクションを実行して操作できる方法です。 モーション コントローラーでは、強く握りしめることによって、つかむアクションを実行できます。 モーション コントローラーでは、グラブ ボタン、手のひらトリガー、または他のセンサーを使用して、つかむ操作を検出できます。
- タッチパッドを使用すると、ユーザーはモーション コントローラーのタッチパッドの表面に沿った 2 次元上でアクションを調整でき、タッチパッドをクリックしてアクションをコミットできます。 タッチパッドには、押された状態と触れた状態があり、正規化された XY 座標があります。 X と Y の範囲は、円形タッチパッドの範囲全体で -1 から 1 までとなり、中心は (0, 0) です。 X については、-1 が左側、1 が右側です。 Y については、-1 が一番下、1 が一番上です。
- サムスティックを使用すると、ユーザーはモーション コントローラーのサムスティックを円形範囲内で動かすことによってアクションを 2 次元で調整でき、サムスティックをクリックしてアクションをコミットできます。 サムスティックには、押された状態と正規化された XY 座標があります。 X と Y の範囲は、円形タッチパッドの範囲全体で -1 から 1 までとなり、中心は (0, 0) です。 X については、-1 が左側、1 が右側です。 Y については、-1 が一番下、1 が一番上です。
- ホームは、スタート メニューに戻る特別なシステム アクションです。 これは、キーボードの Windows キーや、Xbox コントローラーの Xbox ボタンを押すのと似ています。 ホームに移動するには、モーション コントローラーの Windows ボタンを押します。 "Hey Cortana, Go Home" と言うと、いつでもスタートに戻ります。 ホーム アクションはシステムによって処理されるため、アプリではホーム アクションには特に対応できません。
複合ジェスチャ: 高レベルの空間入力
ハンド ジェスチャとモーション コントローラーの両方を経時的に追跡して、高レベルの複合ジェスチャの共通セットを検出できます。 これにより、ユーザーが手またはコントローラーのどちらを使うかに関係なく、高レベルのタップ、保持、操作、ナビゲーションのジェスチャをアプリで検出できます。
モーション コントローラー モデルのレンダリング
3D コントローラー モデル: Windows では、システムで現在アクティブな各モーション コントローラーのレンダリング可能なモデルを、アプリで使用できます。 これらのシステム提供のコントローラー モデルを、アプリで実行時に動的に読み込んで明確に示すことで、将来のコントローラー設計に対する上位互換性をアプリに持たせることができます。
レンダリング可能なすべてのモデルを、コントローラーのグリップ姿勢でレンダリングすることをお勧めします。これは、モデルの原点が現実の世界のこのポイントに合わせられているためです。 コントローラー モデルをレンダリングする場合は、ポインター姿勢からシーンにレイキャストすることが必要な場合もあります。これは、そのコントローラーの物理的な設計から考えて、それに沿ってポイントするのが自然だと思われる光線を表します。
Unity でコントローラー モデルを動的に読み込む方法について詳しくは、Unity でのモーション コントローラー モデルのレンダリングに関するセクションを参照してください。
2D コントローラーの線画: アプリ内のコントローラーのヒントとコマンドは、アプリ内のコントローラー モデル自体に添付することをお勧めしますが、一部の開発者は、フラットな "チュートリアル" または "操作方法" UI で、モーション コントローラーの 2D の線画表現を使用することが必要な場合があります。 これらの開発者のために、.png 形式のモーション コントローラーの線画ファイルを黒と白の両方で以下に用意しました (右クリックして保存できます)。
最大解像度での '''白色の''' モーション コントローラーの線画
最大解像度での '''黒色の''' モーション コントローラーの線画
よく寄せられる質問
モーション コントローラーを複数の PC にペアリングできますか?
モーション コントローラーは、1 台の PC とのペアリングをサポートします。 コントローラーをペアリングするには、モーション コントローラーのセットアップに関する手順に従ってください。
モーション コントローラーのファームウェアはどのように更新しますか?
モーション コントローラーのファームウェアはヘッドセット ドライバーの一部であり、必要に応じて接続時に自動的に更新されます。 ファームウェアの更新には、Bluetooth 無線とリンクの品質によって通常 1 から 2 分かかります。 まれに、コントローラーのファームウェアの更新に最大 10 分かかる場合があります。これは、低品質な Bluetooth 接続または無線の干渉が原因である可能性があります。 接続の問題のトラブルシューティングを行うには、技術者向けガイド の Bluetooth のベスト プラクティスに関するページを参照してください。 ファームウェアの更新後、コントローラーが再起動し、ホスト PC に再接続します (追跡のために LED が点灯する場合があります)。 ファームウェアの更新が中断された場合 (たとえば、コントローラーの電源が失われた場合)、コントローラーの電源が次回オンになったときに、更新が再試行されます。
バッテリー レベルを確認するにはどうすればよいですか?
Windows Mixed Reality のホームで、コントローラーを裏返して、仮想モデルの裏面でバッテリー レベルを確認できます。 物理的なバッテリー レベルのインジケーターはありません。
これらのコントローラーをヘッドセットなしで使用できますか? ジョイスティックやトリガーなどの入力でもかまいませんか?
ユニバーサル Windows アプリケーションには対応していません。
トラブルシューティング
技術者向けガイドのモーション コントローラーのトラブルシューティングに関する記事を参照してください。
モーション コントローラーのフィードバックおよびバグの提出
フィードバックを送るには、フィードバック Hub で、"Mixed Reality -> Input" カテゴリを使用してください。