MRが楽しい

MRやVRについて学習したことを書き残す

MRTK v2のドキュメントを少しずつ読み解く 視線

本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。

MRTKv2のGuidesドキュメント

以下のドキュメントを読み進めていきます。
microsoft.github.io

以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io

本記事では以下のページを読み進めます。
microsoft.github.io
f:id:bluebirdofoz:20200301201729j:plain

視線

視線はユーザーの視線に基づいて世界と対話する入力形式です。これは2つの異なるフレーバーで存在します。

頭の視線

このタイプの視線はヘッド/カメラが見ている方向に基づきます。
視線をサポートしていないシステム、またはハードウェアが視線をサポートしているが、権限と正しいセットアップが実行されていない場合にアクティブになります。

頭の視線は通常、ホログラフィックフレームの中心にオブジェクトを配置し、エアタップジェスチャを実行します。
これにより、オブジェクトを見るというHoloLens1スタイルのインタラクションを関連付けています。

目の視線

このタイプの視線は、ユーザーの目がどこを見ているかに基づいています。
視線は、視線追跡をサポートするシステムにのみ存在します。
視線の使用方法の詳細については、 視線追跡のドキュメントを参照してください。
microsoft.github.io

視線の機能(頭と目の両方)は Gaze Provider によって提供されます。
このプロバイダーは Input System プロファイルの[Pointer]セクションで構成できます。
f:id:bluebirdofoz:20200301201747j:plain

他の入力ソースと同様に、視線プロバイダーは、ポインターを使用してシーン内のオブジェクトと対話します。
Gaze Provider の場合、そのポインターは InternalGazePointer を介して実装され、プロファイルを介して構成されません。

Gaze Provider Type を変更して IMixed Reality Gaze Provider と IMixed Reality Eye Gaze Provider を実装する別々のクラスを参照できます。
これにより、ストックの GazeProvider を交換することは可能です
しかし GazeProvider を再実装するのは簡単ではないため、通常は標準の GazeProvider を使用することをお勧めします。
(バグを発見する際に問題を報告することも推奨します)

使用法

現在の視線ターゲットを取得する方法

このサンプルは、ユーザーの視線の対象となる現在のゲームオブジェクトを取得する方法を示しています。

void LogCurrentGazeTarget()
{
    if (CoreServices.InputSystem.GazeProvider.GazeTarget)
    {
        Debug.Log("User gaze is currently over game object: "
            + CoreServices.InputSystem.GazeProvider.GazeTarget)
    }
}
現在の視線の方向と原点を取得する方法

このサンプルは、ユーザーの視線の方向と原点を表す Vector3 を取得する方法を示します。

void LogGazeDirectionOrigin()
{
    Debug.Log("Gaze is looking in direction: "
        + CoreServices.InputSystem.GazeProvider.GazeDirection);

    Debug.Log("Gaze origin is: "
        + CoreServices.InputSystem.GazeProvider.GazeOrigin);
}