Ввод взгляда

Входные данные взгляда в приложениях смешанной реальности — это сведения о том, на что смотрят ваши пользователи. Когда камеры отслеживания взгляда на устройстве соответствуют лучам в мировом пространстве Unreal, данные о линии зрения пользователя становятся доступными. Взгляд может использоваться как в схемах, так и в C++, и является основной функцией для таких механизмов, как взаимодействие с объектами, поиск путей и элементы управления камерой.

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

  • В параметрах > проекта HoloLens включите возможность ввода взгляда :

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

  • Создание нового субъекта и его добавление в сцену

Примечание

Отслеживание взгляда HoloLens в Unreal имеет только один луч взгляда для обоих глаз. Стереоскопическое отслеживание, для которого требуется два луча, не поддерживается.

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

Сначала убедитесь, что устройство поддерживает отслеживание взгляда с помощью функции IsEyeTrackerConnected . Если функция возвращает значение true, вызовите Метод GetGazeData , чтобы найти, где глаза пользователя смотрят в текущем кадре:

Схема функции Is Eye Tracking Connected

Примечание

Точка фиксации и значение достоверности недоступны в HoloLens.

Используйте источник и направление взгляда в трассировке линии, чтобы узнать, где именно ищут пользователи. Значение взгляда — это вектор, начинающийся с начала взгляда и заканчивающийся в источнике, а также направление взгляда, умноженное на расстояние трассировки линии:

Схема функции Get Gaze Data

Получение ориентации головы

Вы также можете использовать поворот монитора HMD, чтобы представить направление головы пользователя. Вы можете получить направление движения пользователей, не включив возможность ввода взгляда, но вы не получите никаких сведений об отслеживании взгляда. Добавьте ссылку на схему в качестве контекста мира, чтобы получить правильные выходные данные:

Примечание

Получение данных HMD доступно только в Unreal 4.26 и более поздних версиях.

Схема функции Get HMDData

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

  • В файле build.cs игры добавьте EyeTracker в список PublicDependencyModuleNames :
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • В разделе Файл/ Новый класс C++ создайте новый субъект C++ с именем EyeTracker.
    • Решение Visual Studio откроет новый класс EyeTracker. Выполните сборку и запустите, чтобы открыть игру Unreal с новым субъектом EyeTracker. Найдите "EyeTracker" в окне Place Actors (Место субъектов ) и перетащите класс в окно игры, чтобы добавить его в проект:

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

  • В EyeTracker.cpp добавьте элементы для EyeTrackerFunctionLibrary и DrawDebugHelpers:
#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. Отсюда вы можете перейти к следующему стандартному блоку:

Или перейдите к возможностям и API платформы смешанной реальности:

Вы можете в любой момент вернуться к этапам разработки для Unreal.

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