視線入力

Mixed Reality アプリでの視線入力とは、ユーザーが何を見ているかを判別することを指します。 デバイス上の視線追跡カメラを Unreal のワールド空間におけるレイと一致させると、ユーザーの視線データを使用できるようになります。 視線入力は、ブループリントと C++ の両方で使用できます。これは、オブジェクトの対話式操作、経路探索、カメラ コントロールのようなメカニズムのためのコア機能です。

視線追跡の有効化

  • [プロジェクト設定] > [HoloLens] で、[視線入力] 機能を有効にします。

視線入力が強調表示されている HoloLens プロジェクト設定機能のスクリーンショット

  • 新しいアクターを作成してシーンに追加する

Note

Unreal で HoloLens の視線追跡では、両目の視線を 1 つの視線入力レイのみで表します。 2 つのレイを必要とするステレオピック追跡はサポートされていません。

視線追跡の使用

まず、デバイスで IsEyeTrackerConnected 関数を使用した視線追跡がサポートされていることを確認します。 関数が true を返す場合は、GetGazeData を呼び出して、ユーザーの目が現在のフレーム内で見ている場所を見つける必要があります。

[視線追跡接続済み] 関数のブループリント

Note

固視点と信頼度の値は、HoloLens では使用できません。

視線入力の原点と方向をライン トレースで使用して、ユーザーが見ている場所を正確に判別します。 視線入力値はベクトルであり、視線入力の原点から始まって、視線の方向にライン トレースの距離で乗算した位置を原点に加算した位置で終わる値です。

視線入力データの取得関数のブループリント

頭の向きを取得する

また、ヘッド マウントディスプレイ (HMD) の回転を使用して、ユーザーの頭の方向を表すこともできます。 視線入力機能を有効にせずにユーザーの頭の方向を取得できますが、視線追跡情報は一切取得されません。 ブループリントへの参照をワールド コンテキストとして追加して、正しい出力データを取得します。

Note

HMD データの取得は、Unreal 4.26 以降でのみ使用できます。

GET HMDData 関数のブループリント

C++ の使用

  • ゲームの build.cs ファイルで、EyeTrackerPublicDependencyModuleNames リストに追加します。
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • File/ New C++ Class で、EyeTracker という名前の新しい C++ アクターを作成します
    • Visual Studio ソリューションで、新しい EyeTracker クラスが開かれます。 ビルドして実行し、新しい EyeTracker アクターで Unreal ゲームを開きます。 [アクターの配置] ウィンドウで "EyeTracker" を検索し、そのクラスをゲーム ウィンドウにドラッグ アンド ドロップしてプロジェクトに追加します。

アクター ウィンドウが開いているアクターのスクリーンショット

  • EyeTracker.cpp で、EyeTrackerFunctionLibraryDrawDebugHelpers のインクルードを追加します。
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

視線入力データを取得する前に、UEyeTrackerFunctionLibrary::IsEyeTrackerConnected を使用した視線追跡がデバイスでサポートされていることを確認します。 視線追跡がサポートされている場合は、UEyeTrackerFunctionLibrary::GetGazeData からライン トレースのレイの開始位置と終了位置を見つけます。 そこから、視線ベクトルを構築し、その内容を LineTraceSingleByChannel に渡して、レイ ヒットの結果をデバッグできます。

void AEyeTracker::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    if(UEyeTrackerFunctionLibrary::IsEyeTrackerConnected())
    {
        FEyeTrackerGazeData GazeData;
        if(UEyeTrackerFunctionLibrary::GetGazeData(GazeData))
        {
            FVector Start = GazeData.GazeOrigin;
            FVector End = GazeData.GazeOrigin + GazeData.GazeDirection * 100;

            FHitResult Hit Result;
            if (GWorld->LineTraceSingleByChannel(HitResult, Start, End, ECollisionChannel::ECC_Visiblity))
            {
                DrawDebugCoordinateSystem(GWorld, HitResult.Location, FQuat::Identity.Rotator(), 10);
            }
        }
    }
}

次の開発チェックポイント

用意されている Unreal 開発体験に従っている場合、MRTK コア構成要素を探索している段階にいます。 ここから、次の構成要素を続けることができます。

または、Mixed Reality プラットフォームの機能と API に移動します。

いつでも Unreal 開発チェックポイントに戻ることができます。

関連項目