Navegação com suporte ocular no MRTK — MRTK2
Imagine que está a ler informações numa ardósia e, quando chega ao fim do texto apresentado, o texto desloca-se automaticamente para cima para revelar mais conteúdo. Ou pode ampliar fluentemente onde está a olhar. O mapa também ajusta automaticamente o conteúdo para manter os aspetos interessantes no seu campo de vista. Outra aplicação interessante é a observação mãos-livres de hologramas 3D ao trazer automaticamente as partes do holograma que está a ver para a frente. Estes são alguns dos exemplos descritos nesta página no contexto da navegação suportada por olhos.
As descrições seguintes partem do princípio de que já está familiarizado com a configuração do controlo ocular na cena do MRTK e com as noções básicas de acesso aos dados de controlo ocular no MRTK Unity.
Os exemplos abordados no seguinte fazem parte da EyeTrackingDemo-03-Navigation
cena (Assets/MRTK/Examples/Demos/EyeTracking/Scenes/EyeTrackingDemo-03-Navigation).
Resumo: Deslocamento automático do texto, painel suportado pelo olhar e zoom de um mapa virtual, rotação 3D direcionada para olhar livre.
Deslocamento automático
O deslocamento automático permite que o utilizador percorra os textos sem levantar um dedo.
Continue a ler e o texto deslocar-se-á automaticamente para cima ou para baixo, dependendo de onde o utilizador estiver a procurar.
Pode começar a partir do exemplo fornecido em EyeTrackingDemo-03-Navigation
(Assets/MRTK/Examples/Demos/EyeTracking/Scenes).
Este exemplo utiliza um componente TextMesh para permitir o carregamento e formatação flexíveis de novo texto.
Para ativar o deslocamento automático, basta adicionar os dois scripts seguintes ao componente collider da caixa de texto:
ScrollRectTransf
Para percorrer um TextMesh ou, de uma forma mais geral, um componente RectTransform , pode utilizar o script ScrollRectTransf . Se quiser percorrer uma textura em vez de rectTransform, utilize ScrollTexture em vez de ScrollRectTransf. No seguinte, os parâmetros de ScrollRectTransf que estão disponíveis no Editor do Unity são explicados mais detalhadamente:
Parâmetros | Description |
---|---|
LimitPanning | Se estiver ativada, irá parar o conteúdo deslocável no limite. |
RectTransfToNavigate | Referência ao RectTransform para se deslocar. |
RefToViewport | Referência ao rectTransform principal do conteúdo deslocável para determinar o desvio e o limite corretos. |
AutoGazeScrollIsActive | Se estiver ativado, o texto deslocar-se-á automaticamente se o utilizador observar uma região ativa (por exemplo, a parte superior e inferior do painel de deslocamento se a velocidade de deslocamento vertical não for zero). |
ScrollSpeed_x | Se definido como um valor desigual a zero, o deslocamento horizontal será ativado. Os valores negativos significam uma alteração na direção do deslocamento: da esquerda para a direita vs. da direita para a esquerda. |
ScrollSpeed_y | Se definido como um valor desigual a zero, o deslocamento vertical será ativado. Os valores negativos significam uma alteração na direção do deslocamento: Para cima para baixo vs. para baixo para cima. |
MinDistFromCenterForAutoScroll | Normalizou a distância mínima em x e y a partir do centro da caixa de destino (0, 0) para deslocar. Assim, os valores têm de variar entre 0 (deslocar sempre) e 0,5 (sem deslocamento). |
UseSkimProofing | Se estiver ativada, impede movimentos repentinos de deslocamento quando se olha rapidamente. No entanto, isto pode fazer com que o deslocamento se sinta menos reativo. Pode ser otimizado com o valor SkimProofUpdateSpeed . |
SkimProofUpdateSpeed | Quanto mais baixo for o valor, mais lento o deslocamento acelerará após o skimming. Valor recomendado: 5. |
EyeTrackingTarget
Anexar o componente EyeTrackingTarget permite processar de forma flexível eventos relacionados com o olhar. O exemplo de deslocamento demonstra o texto de deslocamento que começa quando o utilizador olha para o painel e para quando o utilizador está a olhar para o lado.
Panorâmica e zoom suportados por gaze
Quem nunca utilizou um mapa virtual antes para procurar a sua casa ou explorar lugares totalmente novos? A monitorização ocular permite-lhe explorar diretamente as partes em que está interessado e, uma vez ampliado, pode seguir sem problemas o curso de uma rua para explorar o seu bairro! Isto não só é útil para explorar mapas geográficos, mas também para ver detalhes em fotografias, visualizações de dados ou até imagens médicas transmitidas em direto. É fácil utilizar esta capacidade na sua aplicação! Para conteúdos compostos com uma Textura (por exemplo, uma fotografia, dados transmitidos em fluxo), basta adicionar o script PanZoomTexture . Para um RectTransform , utilize PanZoomRectTransf. Ao expandir a capacidade de Deslocamento Automático , ativamos essencialmente o deslocamento vertical e horizontal ao mesmo tempo e ampliamos o conteúdo em torno do ponto de foco atual do utilizador.
Parâmetros | Description |
---|---|
LimitPanning | Se estiver ativada, irá parar o conteúdo deslocável no limite. |
HandZoomEnabledOnStartup | Indica se os gestos de mão são ativados automaticamente para efetuar um gesto de zoom. Poderá querer desativá-lo inicialmente para evitar acionar acidentalmente ações de zoom. |
RendererOfTextureToBeNavigated | Compositor referenciado da textura a navegar. |
Zoom_Acceleration | Aceleração de zoom que define a inclinação do mapeamento da função de velocidade logística. |
Zoom_SpeedMax | Velocidade máxima de zoom. |
Zoom_MinScale | Escala mínima da textura para ampliar - por exemplo, 0,5f (metade do tamanho original). |
Zoom_MaxScale | Escala máxima da textura para reduzir - por exemplo, 1f (o tamanho original) ou 2,0f (o dobro do tamanho original). |
Zoom_TimeInSecToZoom | Zoom temporizado: uma vez acionado, será efetuada uma ampliação/ampliação durante um determinado período de tempo em segundos. |
Zoom_Gesture | Tipo de gesto de mão a utilizar para ampliar/reduzir. |
--- | --- |
Pan_AutoScrollIsActive | Se estiver ativado, o texto deslocar-se-á automaticamente se o utilizador observar uma região ativa (por exemplo, a parte superior e inferior do painel de deslocamento se a velocidade de deslocamento vertical não for zero). |
Pan_Speed_x | Se definido como um valor desigual a zero, o deslocamento horizontal será ativado. Os valores negativos significam uma alteração na direção do deslocamento: da esquerda para a direita vs. da direita para a esquerda. |
Pan_Speed_y | Se definido como um valor desigual a zero, o deslocamento vertical será ativado. Os valores negativos significam uma alteração na direção do deslocamento: Para cima para baixo vs. para baixo para cima. |
Pan_MinDistFromCenter | Normalizou a distância mínima em x e y a partir do centro da caixa de destino (0, 0) para deslocar. Assim, os valores têm de variar entre 0 (deslocar sempre) e 0,5 (sem deslocamento). |
UseSkimProofing | Se estiver ativada, impede movimentos repentinos de deslocamento quando se olha rapidamente. No entanto, isto pode fazer com que o deslocamento se sinta menos reativo. Pode ser otimizado com o valor SkimProofUpdateSpeed . |
SkimProofUpdateSpeed | Quanto mais baixo for o valor, mais lento o deslocamento acelerará após o skimming. Valor recomendado: 5. |
Rotação 3D baseada em atenção
Imagine olhar para um objeto 3D e as partes que pretende ver mais de perto magicamente virar-se para si - como se o sistema lesse a sua mente e soubesse virar o item na sua direção! Esta é a ideia para rotações 3D baseadas em atenção que lhe permitem investigar todos os lados de um holograma sem levantar um dedo. Para ativar este comportamento, basta adicionar o script OnLookAtRotateByEyeGaze à parte do seu GameObject com um componente Collider . Pode ajustar vários parâmetros listados abaixo para limitar a velocidade e as direções em que o holograma se irá virar.
Como pode imaginar, ter este comportamento sempre ativo pode tornar-se rapidamente bastante distraído numa cena cheia.
É por isso que poderá querer começar com este comportamento desativado e, em seguida, ativá-lo rapidamente com comandos de voz.
Em alternativa, adicionámos um exemplo em EyeTrackingDemo-03-Navigation
(Assets/MRTK/Examples/Demos/EyeTracking/Scenes) para utilizar TargetMoveToCamera para o qual pode selecionar um destino focado e voa à sua frente - basta dizer "Venha ter comigo".
Uma vez no modo próximo, o modo de rotação automática é ativado automaticamente. Nesse modo, pode observá-lo de todos os lados simplesmente inclinando-se para trás e olhando para ele, andando à sua volta ou estendendo a mão para agarrar e rodar com a sua mão. Quando dispensar o destino (procure & aproximar ou diga "Enviar de volta"), este regressará à localização original e deixará de reagir de longe.
Parâmetros | Description |
---|---|
SpeedX | Velocidade de rotação horizontal. |
Rápido | Velocidade de rotação vertical. |
InversoX | Para inversamente a direção de rotação horizontal. |
Inverso | Para inversamente a direção da rotação vertical. |
RotaçãoThreshInDegrees | Se o ângulo entre "Olhar para Destino" e "Câmara para Destino" for menor do que este valor, não faça nada. Isto é para evitar pequenas rotações nervosas. |
MinRotX | Ângulo de rotação horizontal mínimo. Isto é para limitar a rotação em direções diferentes. |
MaxRotX | Ângulo de rotação horizontal máximo. Isto é para limitar a rotação em direções diferentes. |
MinRotY | Ângulo de rotação vertical mínimo para limitar a rotação em torno do eixo x. |
MaxRotY | Ângulo de rotação vertical máximo para limitar a rotação em torno do eixo y. |
Em resumo, os scripts acima devem permitir-lhe começar a utilizar o olhar para várias tarefas de navegação de entrada, tais como textos de deslocamento, zoom e texturas panorâmicas, bem como a investigação de hologramas 3D.