Navegação com suporte para olhos no MRTK — MRTK2
Imagine que você esteja lendo informações sobre uma lousa e quando chegar ao final do texto exibido, o texto rolará automaticamente para cima para revelar mais conteúdo. Ou você pode ampliar fluentemente onde você está olhando. O mapa também ajusta automaticamente o conteúdo para manter os itens de interesse dentro do campo de exibição. Outro aplicativo interessante é a observação de mãos livres de hologramas 3D trazendo automaticamente as partes do holograma que você está olhando para a frente. Esses são alguns dos exemplos descritos nesta página no contexto de navegação com suporte ocular.
As descrições a seguir pressupõem que você já esteja familiarizado com como configurar o acompanhamento ocular em sua cena do MRTK e com as noções básicas de como acessar dados de rastreamento ocular no MRTK Unity.
Os exemplos discutidos a seguir fazem parte da EyeTrackingDemo-03-Navigation
cena (Assets/MRTK/Examples/Demos/EyeTracking/Scenes/EyeTrackingDemo-03-Navigation).
Resumo: Rolagem automática de texto, painel com suporte para olhar e zoom de um mapa virtual, rotação 3D direcionada por foco sem mãos.
Rolagem automática
A rolagem automática permite que o usuário role os textos sem levantar um dedo.
Basta continuar a leitura e o texto rolará automaticamente para cima ou para baixo, dependendo de onde o usuário estiver procurando.
Você pode começar com o exemplo fornecido em EyeTrackingDemo-03-Navigation
(Assets/MRTK/Examples/Demos/EyeTracking/Scenes).
Este exemplo usa um componente TextMesh para permitir o carregamento flexível e a formatação de novo texto.
Para habilitar a rolagem automática, basta adicionar os dois scripts a seguir ao componente do colisor da caixa de texto:
ScrollRectTransf
Para rolar por um TextMesh ou, de modo mais geral, um componente RectTransform , você pode usar o script ScrollRectTransf . Se você quiser rolar por uma textura em vez de uma RectTransform, use ScrollTexture em vez de ScrollRectTransf. No seguinte, os parâmetros de ScrollRectTransf que estão disponíveis no Editor do Unity são explicados com mais detalhes:
Parâmetros | Descrição |
---|---|
LimitPanning | Se habilitado, interromperá o conteúdo rolável em seu limite. |
RectTransfToNavigate | Referência ao RectTransform para rolar. |
RefToViewport | Referência ao RectTransform pai do conteúdo rolável para determinar o deslocamento e o limite corretos. |
AutoGazeScrollIsActive | Se habilitado, o texto rolará automaticamente se o usuário examinar uma região ativa (por exemplo, a parte superior e inferior do painel de rolagem se a velocidade de rolagem vertical não for zero). |
ScrollSpeed_x | Se definido como um valor diferente de zero, a rolagem horizontal será habilitada. Valores negativos significam uma alteração na direção da rolagem: da esquerda para a direita versus da direita para a esquerda. |
ScrollSpeed_y | Se definido como um valor diferente de zero, a rolagem vertical será habilitada. Valores negativos significam uma alteração na direção da rolagem: para cima para baixo versus para baixo para cima. |
MinDistFromCenterForAutoScroll | Distância mínima normalizada em x e y do centro da caixa de ocorrência do destino (0, 0) para rolar. Assim, os valores devem variar entre 0 (sempre rolagem) e 0,5 (sem rolagem). |
UseSkimProofing | Se habilitado, ele impede movimentos repentinos de rolagem ao olhar rapidamente ao redor. Isso pode fazer com que a rolagem se sinta menos responsiva. Ele pode ser ajustado com o valor SkimProofUpdateSpeed . |
SkimProofUpdateSpeed | Quanto menor o valor, mais lenta a rolagem acelerará após o skimming. Valor recomendado: 5. |
EyeTrackingTarget
Anexar o componente EyeTrackingTarget permite manipular de forma flexível eventos relacionados ao olhar. O exemplo de rolagem demonstra o texto de rolagem que começa quando o usuário olha para o painel e para quando o usuário está olhando para longe dele.
Painel com suporte para foco e zoom
Quem não usou um mapa virtual antes para procurar sua casa ou explorar lugares totalmente novos? O rastreamento ocular permite que você se aprofunde diretamente nas partes que você está interessado e, uma vez ampliado, você pode seguir sem problemas o curso de uma rua para explorar seu bairro! Isso não é apenas útil para explorar mapas geográficos, mas também para conferir detalhes em fotografias, visualizações de dados ou até mesmo imagens médicas transmitidas ao vivo. Usar essa funcionalidade em seu aplicativo é fácil! Para conteúdo renderizado em uma Textura (por exemplo, uma foto, dados transmitidos), basta adicionar o script PanZoomTexture . Para um RectTransform , use PanZoomRectTransf. Estendendo a funcionalidade de Rolagem Automática , basicamente habilitamos a rolagem vertical e horizontal ao mesmo tempo e ampliamos o conteúdo ao redor do ponto de foco atual do usuário.
Parâmetros | Descrição |
---|---|
LimitPanning | Se habilitado, interromperá o conteúdo rolável em seu limite. |
HandZoomEnabledOnStartup | Indica se os gestos manuais são habilitados automaticamente para executar um gesto de zoom. Talvez você queira desabilitá-lo no início para evitar disparar acidentalmente ações de zoom. |
RendererOfTextureToBeNavigated | Renderizador referenciado da textura a ser navegada. |
Zoom_Acceleration | Aceleração de zoom definindo a inclinação do mapeamento de 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 ampliar - por exemplo, 1f (o tamanho original) ou 2,0f (o dobro do tamanho original). |
Zoom_TimeInSecToZoom | Zoom cronometrado: uma vez disparado, uma redução/redução será executada pelo tempo determinado em segundos. |
Zoom_Gesture | Tipo de gesto de mão a ser usado para ampliar/reduzir. |
--- | --- |
Pan_AutoScrollIsActive | Se habilitado, o texto rolará automaticamente se o usuário examinar uma região ativa (por exemplo, a parte superior e inferior do painel de rolagem se a velocidade de rolagem vertical não for zero). |
Pan_Speed_x | Se definido como um valor diferente de zero, a rolagem horizontal será habilitada. Valores negativos significam uma alteração na direção da rolagem: da esquerda para a direita versus da direita para a esquerda. |
Pan_Speed_y | Se definido como um valor diferente de zero, a rolagem vertical será habilitada. Valores negativos significam uma alteração na direção da rolagem: para cima para baixo versus para baixo para cima. |
Pan_MinDistFromCenter | Distância mínima normalizada em x e y do centro da caixa de ocorrência do destino (0, 0) para rolar. Assim, os valores devem variar entre 0 (sempre rolagem) e 0,5 (sem rolagem). |
UseSkimProofing | Se habilitado, ele impede movimentos repentinos de rolagem ao olhar rapidamente ao redor. Isso pode fazer com que a rolagem se sinta menos responsiva. Ele pode ser ajustado com o valor SkimProofUpdateSpeed . |
SkimProofUpdateSpeed | Quanto menor o valor, mais lenta a rolagem 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 você deseja ver mais de perto magicamente se voltam em sua direção - como se o sistema lesse sua mente e saiba virar o item em sua direção! Essa é a ideia para rotações 3D baseadas em atenção que permitem investigar todos os lados de um holograma sem levantar um dedo. Para habilitar esse comportamento, basta adicionar o script OnLookAtRotateByEyeGaze à parte do GameObject com um componente Collider . Você pode ajustar vários parâmetros listados abaixo para limitar a rapidez e em quais direções o holograma será girado.
Como você pode imaginar, ter esse comportamento ativo o tempo todo pode rapidamente se tornar bastante perturbador em uma cena lotada.
É por isso que talvez você queira começar com esse comportamento desabilitado e habilitá-lo rapidamente usando comandos de voz.
Como alternativa, adicionamos um exemplo em EyeTrackingDemo-03-Navigation
(Assets/MRTK/Examples/Demos/EyeTracking/Scenes) para usar TargetMoveToCamera para o qual você pode selecionar um destino focado e ele voa na sua frente - basta dizer "Venha para mim".
Uma vez no modo próximo, o modo de rotação automática é habilitado automaticamente. Nesse modo, você pode observá-lo de todos os lados simplesmente inclinando-se para trás e olhando para ele, andando em torno dele ou estendendo a mão para agarrá-lo e girá-lo com a mão. Quando você ignorar o destino (olhe & pinçar ou diga "Enviar de volta"), ele retornará ao seu local original e deixará de reagir a você de longe.
Parâmetros | Descrição |
---|---|
Speedx | Velocidade de rotação horizontal. |
Rápida | Velocidade de rotação vertical. |
InverseX | Para inverter a direção de rotação horizontal. |
Inverso | Para inverter a direção de rotação vertical. |
RotationThreshInDegrees | Se o ângulo entre 'Olhar para o Destino' e 'Câmera para Destino' for menor que esse valor, não faça nada. Isso é para evitar pequenas rotações de tremulação. |
MinRotX | Ângulo mínimo de rotação horizontal. Isso é para limitar a rotação em direções diferentes. |
MaxRotX | Ângulo máximo de rotação horizontal. Isso é para limitar a rotação em direções diferentes. |
MinRotY | Ângulo mínimo de rotação vertical para limitar a rotação ao redor do eixo x. |
MaxRotY | Ângulo máximo de rotação vertical para limitar a rotação ao redor do eixo y. |
Em resumo, os scripts acima devem permitir que você comece a usar o olhar para várias tarefas de navegação de entrada, como textos de rolagem, texturas de zoom e movimento panorâmico, bem como girar a investigação de hologramas 3D.