Calibração ocular

Screenshot da notificação de calibração ocular

Descrição Geral

Se o rastreio de olhos for uma parte fundamental da sua experiência na aplicação, pode-se desejar garantir que a calibração ocular do utilizador é válida. A razão principal para ser inválido é que o utilizador optou por saltar a calibração de rastreio ocular ao colocar o dispositivo.

Esta página abrange o seguinte:

  • Descreve como detetar que um utilizador é calibrado nos olhos
  • Fornece uma amostra de como desencadear uma notificação do utilizador para instruir o utilizador a passar pela calibração ocular
    • Dispense automaticamente a notificação se a calibração ocular se tornar válida
    • Descartar manualmente a notificação se o utilizador optar por continuar sem calibração

Como detetar o estado de calibração ocular

A configuração de rastreio de olhos no MRTK é configurada através da IMixedRealityEyeGazeProvider interface.

Utilizando o CoreServices.InputSystem.EyeGazeProvider fornece a implementação do fornecedor de gaze predefinido registada no conjunto de ferramentas em tempo de execução. IMixedRealityEyeGazeProvider.IsEyeGazeValid retorna um bool? que é nulo se nenhuma informação do localizador de olhos estiver disponível ainda. Uma vez recebidos os dados, irá retornar verdadeiro ou falso para indicar que a calibração de rastreio ocular do utilizador é válida ou inválida.

Notificação de calibração de olhos de amostra - passo a passo

  1. Abra o pacote de exemplo de rastreio de olhos MRTK (Ativos/MRTK/Exemplos/Demos/EyeTracking)

  2. Carregar cena de EyeTrackingDemo-00-RootScene.unidade

  3. Confira eyeCalibrationChecker:

    • Nesta cena, já dispomos de uma amostra para detetar se o utilizador atual está calibrado sob o objeto de jogo EyeCalibrationChecker. Simplesmente pais algumas malhas de texto e tem alguns gatilhos adicionais para misturar a notificação dentro e fora. Isto inclui aumentar lentamente o seu tamanho e opacidade na ativação. Uma vez que a notificação é rejeitada, irá lentamente diminuir o seu tamanho e desaparecer.

    • Anexado ao objeto do jogo EyeCalibrationChecker está o script EyeCalibrationChecker que expõe dois Eventos de Unidade:

      • OnEyeCalibrationDetected()
      • OnNoEyeCalibrationDetected()
    • Estes eventos só serão desencadeados se o estado de calibração mudar. Assim, se um utilizador optar por rejeitar a notificação, a notificação não voltará a aparecer até

      • A aplicação é reiniciada
      • Foi detetado um utilizador válido e, em seguida, um novo utilizador não calibrado colocou o dispositivo em
    • Para testar se as animações e eventos são desencadeados corretamente, o script EyeCalibrationChecker possui uma bool editorTestUserIsCalibrated bandeira. Por exemplo, ao correr no Editor de Unidade, pode-se testar:

      1. Se a notificação aparece automaticamente uma vez que o estado de calibração muda de verdadeiro para falso
      2. Se automaticamente descarta a notificação novamente uma vez que o estado muda de falso para verdadeiro.
    private bool? prevCalibrationStatus = null;
    ...

   void Update()
   {
      // Get the latest calibration state from the EyeGazeProvider
      bool? calibrationStatus = CoreServices.InputSystem?.EyeGazeProvider?.IsEyeCalibrationValid;

      ...

      if (calibrationStatus != null)
      {
         if (prevCalibrationStatus != calibrationStatus)
         {
            if (calibrationStatus == false)
            {
               OnNoEyeCalibrationDetected.Invoke();
            }
         else
         {
            OnEyeCalibrationDetected.Invoke();
         }

         prevCalibrationStatus = calibrationStatus;
      }
   }

Ver também