Входные данные взглядаGaze Input

Взгляните на ввод в приложениях смешанной реальности, чтобы узнать, что пользователи видят.Gaze input in mixed reality apps is all about finding out what your users are looking at. Когда камеры отслеживания взгляда на устройстве сопоставляются с лучами в нереальном пространстве, данные о пользователе становятся доступными.When the eye tracking cameras on your device match up with rays in Unreal's world space, your user's line of sight data becomes available. Взгляд можно использовать как в чертежах, так и в C++, и является основным компонентом для таких ядер, как взаимодействие объектов, Поиск и управление камерой.Gaze can be used in both blueprints and C++, and is a core feature for mechanics like object interaction, way finding, and camera controls.

Включение отслеживания взглядаEnabling eye tracking

  • В параметрах проекта > HoloLens включите функцию ввода с помощью средства входа.In Project Settings > HoloLens, enable the Gaze Input capability:

Снимок экрана возможностей настройки проекта HoloLens с выделенными входными данными Взгляните

  • Создание нового субъекта и его добавление в сценуCreate a new actor and add it to your scene

Примечание

Отслеживание глаз HoloLens в нереальном режиме имеет один луч для обоих глаз.HoloLens eye tracking in Unreal only has a single gaze ray for both eyes. Отслеживание стереоскопик, для которого требуется два луча, не поддерживается.Stereoscopic tracking, which requires two rays, isn't supported.

Использование функции отслеживания взглядаUsing eye tracking

Сначала убедитесь, что устройство поддерживает отслеживание взгляда с помощью функции исэйетраккерконнектед .First, check that your device supports eye tracking with the IsEyeTrackerConnected function. Если функция возвращает значение true, вызовите жетгазедата , чтобы найти, где глаза пользователя просматриваются в текущем кадре:If the function returns true, call GetGazeData to find where the user’s eyes are looking at in the current frame:

Схема подключенной функции отслеживания взгляда

Примечание

Точка с фиксацией и значение достоверности недоступны в HoloLens.The fixation point and the confidence value are not available on HoloLens.

Используйте источник и направление взгляда в трассировке строки, чтобы точно определить, где находятся ваши пользователи.Use the gaze origin and direction in a line trace to find out exactly where your users are looking. Значение взгляда является вектором, начинающимся с источника взгляда и заканчивая началом координат, а также направлением взгляда, умноженным на расстояние трассировки строки:The gaze value is a vector, starting at the gaze origin and ending at the origin plus the gaze direction multiplied by the line trace distance:

Схема функции получения данных об взгляде

Получение ориентации головного экранаGetting head orientation

Также можно использовать поворот головного дисплея (ХМД) для представления направления заголовка пользователя.You can also use the rotation of the Head Mounted Display (HMD) to represent the direction of the user’s head. Вы можете получить направление заголовка пользователей, не включив функцию ввода с клавиатуры, но не будете получать сведения об отслеживании взгляда.You can get the users head direction without enabling the Gaze Input capability, but you won't get you any eye tracking information. Добавьте ссылку на проект в качестве контекста мира, чтобы получить правильные выходные данные:Add a reference to the blueprint as the world context to get the correct output data:

Примечание

Получение данных ХМД доступно только в нереальных 4,26 и более.Getting HMD Data is only available in Unreal 4.26 and onwards.

Схема функции Get Хмддата

Использование C++Using C++

  • В файле Build.CS вашей игры добавьте Эйетраккер в список публикдепенденцимодуленамес :In your game’s build.cs file, add EyeTracker to the PublicDependencyModuleNames list:
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • В файле или новом классе c++ создайте новый субъект c++ с именем эйетраккерIn File/ New C++ Class, create a new C++ actor called EyeTracker
    • В решении Visual Studio откроется новый класс Эйетраккер.A Visual Studio solution will open up the new EyeTracker class. Выполните сборку и запустите, чтобы открыть нереальную игру с новым субъектом Эйетраккер.Build and run to open the Unreal game with the new EyeTracker actor. Выполните поиск строки "Эйетраккер" в окне " место субъектов " и перетащите класс в окно игры, чтобы добавить его в проект:Search for “EyeTracker” in the Place Actors window and drag and drop the class into the game window to add it to the project:

Снимок экрана субъекта с открытым окном субъекта

  • В эйетраккер. cpp добавьте включения для эйетраккерфунктионлибрари и дравдебугхелперс:In EyeTracker.cpp, add includes for EyeTrackerFunctionLibrary, and DrawDebugHelpers:
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

Убедитесь, что устройство поддерживает отслеживание взгляда с помощью уэйетраккерфунктионлибрари:: исэйетраккерконнектед , прежде чем пытаться получить данные о взгляде.Check that your device supports eye tracking with UEyeTrackerFunctionLibrary::IsEyeTrackerConnected before trying to get any gaze data. Если отслеживание взгляда поддерживается, найдите начало и конец луча для трассировки строки из уэйетраккерфунктионлибрари:: жетгазедата.If eye tracking is supported, find the start and end of a ray for a line trace from UEyeTrackerFunctionLibrary::GetGazeData. После этого можно создать вектор взгляда и передать его содержимое в линетрацесинглебичаннел для отладки любых результатов попадания луча:From there, you can construct a gaze vector and pass its contents to LineTraceSingleByChannel to debug any ray hit results:

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);
            }
        }
    }
}

Следующий этап разработкиNext Development Checkpoint

Если вы следуете изложенным нами инструкциям по разработке для Unreal, вы как раз прошли половину в изучении основных стандартных блоков MRTK.If you're following the Unreal development journey we've laid out, you're in the midst of exploring the MRTK core building blocks. Отсюда вы можете перейти к следующему стандартному блоку:From here, you can continue to the next building block:

Или перейдите к возможностям и API платформы смешанной реальности:Or jump to Mixed Reality platform capabilities and APIs:

Вы можете в любой момент вернуться к этапам разработки для Unreal.You can always go back to the Unreal development checkpoints at any time.

См. также статьюSee also