Calibragem ocular – MRTK2
Descrição Geral
Se o controlo ocular for uma parte fundamental da sua experiência de aplicação, poderá querer garantir que a calibragem ocular do utilizador é válida. A principal razão para ser inválido é que o utilizador optou por ignorar a calibragem de controlo ocular ao colocar o dispositivo.
Esta página abrange o seguinte:
- Descreve como detetar que um utilizador está calibrado para os olhos
- Fornece um exemplo de como acionar uma notificação de utilizador para instruir o utilizador a passar pela calibragem ocular
- Dispensar automaticamente a notificação se a calibragem ocular se tornar válida
- Dispensar manualmente a notificação se o utilizador optar por continuar sem calibragem
Como detetar o estado de calibragem ocular
A configuração de controlo ocular no MRTK é configurada através da IMixedRealityEyeGazeProvider
interface.
A utilização de CoreServices.InputSystem.EyeGazeProvider fornece a implementação do fornecedor de olhar predefinida registada no toolkit no runtime.
IMixedRealityEyeGazeProvider.IsEyeGazeValid
devolve um bool?
que é nulo se ainda não estiverem disponíveis informações do controlador ocular.
Assim que os dados tiverem sido recebidos, serão devolvidos verdadeiros ou falsos para indicar que a calibragem de controlo ocular do utilizador é válida ou inválida.
Notificação de calibragem ocular de exemplo – passo a passo
Abra o pacote de exemplo de controlo ocular MRTK (Assets/MRTK/Examples/Demos/EyeTracking)
Carregar a cena EyeTrackingDemo-00-RootScene.unity
Veja EyeCalibrationChecker:
Nesta cena, já temos um exemplo para detetar se o utilizador atual está calibrado no objeto de jogo EyeCalibrationChecker. Limita-se a criar algumas malhas de texto e tem alguns acionadores adicionais para misturar a notificação dentro e fora. Isto inclui aumentar lentamente o seu tamanho e opacidade na ativação. Assim que a notificação for dispensada, diminuirá lentamente o tamanho e desaparecerá.
Anexado ao objeto de jogo EyeCalibrationChecker está o script EyeCalibrationChecker que expõe dois Eventos do Unity:
OnEyeCalibrationDetected()
OnNoEyeCalibrationDetected()
Estes eventos só serão acionadas se o estado de calibragem for alterado. Assim, se um utilizador optar por dispensar a notificação, a notificação só será apresentada depois de
- A aplicação é reiniciada
- Foi detetado um utilizador válido e, em seguida, um novo utilizador não calibrado colocou o dispositivo
Para testar se as animações e eventos são acionados corretamente, o script EyeCalibrationChecker possui um
bool editorTestUserIsCalibrated
sinalizador. Por exemplo, ao executar no Editor do Unity, pode-se testar:- Se a notificação é apresentada automaticamente assim que o estado de calibragem mudar de verdadeiro para falso
- Se volta a dispensar automaticamente a notificação assim que o estado mudar 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;
}
}