Navegação com suporte para olhos no MRTK — MRTK2
Imagine você estiver lendo informações em uma ardósia e quando chegar ao final do texto exibido, o texto será rolado 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 as coisas de interesse dentro do campo de exibição. Outro aplicativo interessante é a observação 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 para olhos.
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 acompanhamento 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 ao olhar sem mãos.
Rolagem automática
A rolagem automática permite que o usuário role os textos sem levantar um dedo.
Basta continuar lendo e o texto rolará automaticamente para cima ou para baixo, dependendo de onde o usuário está 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 mais de modo 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 será rolado 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 clique do destino (0, 0) para rolar. Assim, os valores devem variar entre 0 (sempre rolagem) e 0,5 (sem rolagem). |
UseSkimProofing | Se habilitado, ele evita movimentos repentinos de rolagem ao olhar rapidamente ao redor. Isso pode fazer com que a rolagem pareça menos responsiva. Ele pode ser ajustado com o valor SkimProofUpdateSpeed . |
SkimProofUpdateSpeed | Quanto menor o valor, mais lento 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 e zoom compatíveis com o olhar
Who não usou um mapa virtual antes para procurar sua casa ou explorar lugares totalmente novos? O acompanhamento ocular permite que você mergulhe 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 das mãos 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 zoom - 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, um zoom será executado durante o tempo determinado em segundos. |
Zoom_Gesture | Tipo de gesto de mão a ser usado para ampliar/reduzir. |
--- | --- |
Pan_AutoScrollIsActive | Se habilitado, o texto será rolado 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 clique do destino (0, 0) para rolar. Assim, os valores devem variar entre 0 (sempre rolagem) e 0,5 (sem rolagem). |
UseSkimProofing | Se habilitado, ele evita movimentos repentinos de rolagem ao olhar rapidamente ao redor. Isso pode fazer com que a rolagem pareça menos responsiva. Ele pode ser ajustado com o valor SkimProofUpdateSpeed . |
SkimProofUpdateSpeed | Quanto menor o valor, mais lento a rolagem acelerará após o skimming. Valor recomendado: 5. |
Rotação 3D baseada em atenção
Imagine olhando para um objeto 3D e as partes que você deseja ver mais de perto magicamente se voltam para você - como se o sistema lesse sua mente e soubesse 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 de seu 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 em todos os momentos 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 até 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 ao redor dele ou estendendo a mão para agarrá-lo e girá-lo com a mão. Quando você ignorar o destino (olhar & pinçar ou dizer "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 | Inversa a direção de rotação vertical. |
RotationThreshInDegrees | Se o ângulo entre 'Gaze to Target' e 'Câmera to Target' for menor que esse valor, não faça nada. Isso é para evitar pequenas rotações de nervosismo. |
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, além de girar a investigação de hologramas 3D.
Veja também
- Configuração básica do MRTK para usar o acompanhamento ocular
- Seleção de destino com suporte para olhos