Prévia do material em texto
REALIDADE VIRTUAL E AUMENTADA AULA 6 Prof. Victor Emanuel Montes Moreira 2 CONVERSA INICIAL Nesta abordagem, vamos estudar sobre o desenvolvimento de aplicações para realidade virtual com Unity. Para as discussões propostas, você precisa ter conhecimentos básicos sobre Unity. Não precisa ter um headset de realidade virtual, vamos demonstrar como usar um simulador de controles para RV. Vamos começar importando todos os recursos necessários para criar uma aplicação em RV no Unity. Também veremos como podemos interagir na RV mesmo sem um headset. E, se esse for o seu caso, recomendamos que você passe alguns minutos se acostumando com os controles. Vamos compreender os principais componentes de uma aplicação de RV, desde câmera e controles até o gerenciador de entradas no sistema. Depois, vamos aprender como configurar a movimentação no espaço RV. Veremos como usar áreas de teletransporte e âncoras de teletransporte. Também veremos como interagir com objetos, desde formas de interação até a física do objeto na cena. E, por fim, aprenderemos a criar soquetes, ou seja, locais onde podemos colocar e fixar objetos. Lembre-se de que o Unity e as tecnologias de RV estão em constante evolução; por isso, você deve lidar com possíveis atualizações e mudanças. Vamos lá! TEMA 1 – PROJETO DE VR NO UNITY Vamos começar criando uma aplicação em realidade virtual. Vamos exemplificar em o Unity, usando a versão 2022.3.12f1 LTS. Se você estiver usando uma versão mais recente do Unity, certifique-se de usar a versão LTS. 1.1 Plugins do Unity para realidade virtual Para configurar nosso projeto Unity para VR, precisaremos usar vários pacotes. Vamos começar habilitando o XR Plugin Management. Para isso, acesse Project Settings e faça a instalação. 3 Figura 1 – Instalando XR Plugin Management Esse é o principal pacote para projetos em XR (Mixed Reality). Esse pacote gerencia o diversos plugins que dão suporte a interações em realidade virtual e aumentada. Figura 2 – Habilitando Open XR Vamos começar habilitando o OpenXR. Ele fornece uma interface padronizada que permite configurar várias entradas XR, desde headsets mais simples como Oculus Go até o Oculus Quest 3, entre outros. Dessa forma, em um único projeto pode ser portado para várias plataformas (Unity Technologies, 2022). 4 Ao habilitar o OpenXR, você precisa fazer alguns ajustes e corrigir alguns erros para executar o projeto. Figura 3 – Erros no Project Validation Em Project Validation, surgirão dois erros. Para o primeiro, é só clicar em Fix que o sistema faz o ajuste. Já para o segundo, você precisa clicar em Edit e encontrar a próxima tela. Figura 4 – Adicionando o Interaction Profiles Aqui precisamos escolher um dos perfis de interação. Você pode escolher qualquer um dos perfis, mas recomendamos que escolha o Oculus Touch Controller Profile. 5 Na mesma janela, certifique-se de que o Render Mode esteja definido como Multi-pass: • Multi-pass: renderiza a cena em duas imagens mostradas separadamente para cada olho e é a opção recomendada; • Single-pass: combina ambas as imagens em uma única textura de largura dupla, onde apenas a metade relevante é exibida para cada olho. 1.2 Configurando interações de VR Lembre-se de que, para haver interações, são necessárias entradas (inputs) e saídas (output). Quando trabalhamos com realidade virtual, mais especificamente com headsets de VR, precisamos compreender que esse é um processo dinâmico, ou seja, a cada milissegundo essas interações acontecem. Grande parte desse processo se dá pelo rastreamento de posição do headset e dos controles, ou seja, você nem precisa pressionar um botão, o simples fato de existir um controle já faz com que aconteça uma entrada constante de dados. Por isso, precisamos de um ótimo gerenciador de interações (para a nossa sorte, o Unity já fornece). O XR Interaction Toolkit é uma ferramenta oferecida pela Unity para facilitar o desenvolvimento de experiências interativas em VR e AR. Ele é baseado em componentes, o que significa que você pode adicionar funcionalidades a objetos simplesmente anexando diferentes componentes a eles. Isso torna o processo de desenvolvimento mais modular e reutilizável (Unity Learn, 2024). Agora vamos instalar o XR Interaction Toolkit. Acesse Packge Manager e escolha Packges: Unity Registry. Lá podemos ver vários plugins do Unity; quase ao final da lista encontramos o XR Interaction Toolkit. 6 Figura 5 – Instalando pacote XR Interaction Toolkit Depois de instalar os recursos básicos, precisamos adicionar mais dois recursos no XR Interaction Toolkit. Clique em Samples e adicione os pacotes: Starter Assets e XR Device Simulator. Figura 6 – Adicionando Samples do XR Interaction Toolkit 7 1.3 Interagindo com a RV Depois dessa instalação básica, já podemos fazer a nossa primeira interação na realidade virtual. Na aba Project, clique em Assets > Samples > XR Interaction Toolkit > 2.5.4 > Starter Assets e entre na DemoScene. Figura 7 – Acessando DemoScene Lá você vai encontrar uma cena com diversos tipos de interação em RV. Figura 8 – Cena de demonstração do XR Interaction Toolkit Mas, se você não tiver um heardset de realidade virtual, não vai conseguir tirar proveito dessas interações. Então, vamos adicionar o XR Device Simulator. Acesse a pasta Assets > Sample s> XR Interaction Toolkit > 2.5.4 > XR Device Simulator, selecione o prefab (XR Device Simulator) e adicione na cena. 8 Figura 9 – Adicionando Prefab XR Device Simulator Você não vai precisar configurar nada, é só adicionar na cena. Quando apertar Play, verá os controles. Figura 10 – Acessando DemoScene com XR Device Simulator Recomendados que você passe algum tempo se familiarizando com os controles. Eles são bem difíceis de se acostumar. Verifique também todas as interações que colocamos nessa cena de demonstração. TEMA 2 – CRIANDO UMA CENA 2.1 Criando uma cena com Prefabs do Starter Assets Agora, vamos criar uma cena para compreender melhor os elementos de interação para realidade virtual. Siga estes passos: 1. Delete a Main Camera (que vem como padrão quando criamos uma cena nova); 9 2. Adicione um GameObject > 3D Object > Plane; 3. Adicione o prefab XR Interaction Setup (clique em Assets > Samples > XR Interaction Toolkit > 2.5.4 > Starter Assets > Prefabs). Figura 11 – Acessando XR Origin Setup 4. Adicione o XR Device Simulator (clique em Assets > Samples > XR Interaction Toolkit > 2.5.4> XR Device Simulator selecione o prefab (XR Device Simulator) e adicione na cena). A hierarquia de elementos na cena ficará como na Figura 12. Figura 12 – Hierarquia de elementos na cena Apenas com esses elementos, se você der play na cena, poderá andar e mexer os controles. 2.2 XR Interaction Setup O elemento XR Interaction Setup que colocamos na cena é um prefab, ou seja, é um gameobject previamente criado. Nele, encontramos elementos necessários para a interação na realidade virtual. 10 Figura 13 – Hierarquia de elementos no XR Interaction Setup Vamos ver alguns dos principais elementos que fazem parte desse prefab. 2.3 Input Action Manager Veja que no Input Action Manager existe apenas um script que faz uma referência ao XRI Default Input Actions. Figura 14 – Inspector do Input Action Manager Ao acessar o elemento XRI Default Input Actions, você contará o arquivo na pasta de assets. Ao abrir esse arquivo, você pode ver o gerenciador de controles por meio do Input System. 11 Figura 15 – Configuração do XRI Default Input Actions no Input System Aqui, você irá encontrar as referências de todas as entradas do sistema, desde o rastreamento do headset na cabeça até controles touchscreen oude gestos. 2.4 XR Interaction Manager Para compreender o uso do Interaction Manager, precisamos entender a diferença entre Interactors e Interactables. • Interactors: são os elementos que permitem ao usuário interagir com o mundo virtual. Eles podem ser pensados como as mãos ou ferramentas que o usuário usa para interagir com objetos no ambiente virtual. • Interactables: são os GameObjects com os quais o usuário pode interagir. Eles podem ser qualquer coisa no mundo virtual que responda à interação do usuário, como botões, alavancas, objetos pegáveis etc. Nesse contexto, o Interaction Manager atua como um intermediário entre Interactors e Interactables. É possível ter vários Interaction Managers, cada um com seu próprio conjunto válido de Interactors e Interactables. Ao serem habilitados, tanto Interactors quanto Interactables se vinculam em um Interaction Manager. As cenas carregadas devem ter pelo menos um Interaction Manager para que Interactors e Interactables possam se comunicar. 2.5 XR Origin (XR Rig) Atua como os olhos, ouvidos e mãos do jogador no ambiente virtual. Funciona como uma base para os sistemas de locomoção e/ou teletransporte, que permitem ao usuário se movimentar no mundo virtual. Ao adicionar um novo XR Origin, você irá encontrar a seguinte configuração. 12 Figura 16 – Componentes do XR Origin • Origin Base GameObject: determina o ponto de origem do objeto. Por padrão, colocamos o próprio gameobject; • Camera Floor Offset GameObject: esse é o objeto a partir do qual a câmera é deslocada; • Camera: a câmera usada para renderizar a cena, esse GameObject serve como chefe do XR Rig; • Tracking Origin Mode: essa configuração determina a localização do centro do mundo; • Camera Y Offset: determina a distância entre o solo e os olhos do jogador. Dessa forma, o XR Rig assume o controle da câmera principal na cena, colocando sob o controle de um objeto Camera Floor Offset, que coloca a câmera na altura especificada pelo Camera Y Offset. 2.6 Criando uma cena em VR Agora, vamos criar uma cena para VR do zero. Crie uma cena, delete a Main Camera. Depois, adicione dois GameObjects: Interaction Manager e o XR Origin (VR). 13 Figura 17 – Criando dois GameObjects: Interaction Manager e o XR Origin (VR) Para compor a cena, adicione um Plane, crie um material verde e vincule esse material no Plane. Também adicione o Prefab XR Device Simulator se você não tiver um headset de realidade virtual. Figura 18 – Hierarquia de elementos na cena Agora, precisamos configurar os controles que serão usados. Expanda o XR Origin (XR Rig) e verifique os filhos Left Controller e Right Controller. 14 Figura 19 – Hierarquia dos controles Ao selecionar um desses objetos, você verá que o script XR Controller (Action-Based) está sem controles configurados. Figura 20 – XR Controller (Action-Based) sem controles configurados 15 Clique no ícone de Presets, e selecione a configuração de cada lado dos controles. Por exemplo, se for do Right Controller selecione XRI Default Right Controller. Figura 21 – Selecionado o Preset Depois de adicionar a configuração dos controles, você poderá interagir no ambiente virtual. Além disso, você pode adicionar uma esfera na base do controle. No mesmo componente, você encontrará o Model Prefab, no qual você pode colocar um Prefab para ficar na base onde estaria o controle. Figura 22 – Colocando um elemento no XR Controller (Action-Based) para servir como base do controle Aqui, colocamos uma esfera simples, com um material preto. 16 Figura 23 – Visualizando cena TEMA 3 – MOVIMENTAÇÃO Para interagir na realidade virtual, precisamos de diversas ferramentas para auxiliar e facilitar a navegação. 3.1 Giro rápido Primeiro precisamos adicionar um mediador para o sistema locomoção (Murray, 2020). Vá no componente XR Rig e adicione um componente Locomotion System. No componente Locomotion System a propriedade Script estará vazia, nesse local você deve referências o XR Origin. Figura 24 – Adicionando Locomotion System 17 O Locomotion System é usado para mediar os acessos ao XR Origin. Esse sistema filtra os controladores de movimento possibilitando que apenas um sistema possa mover o XR Origin por vez (Unity Technologies, 2023). Agora vamos adicionar a funcionalidade de girar. Vá no XR Rig e adicione o componente Snap Turn Provider (Action-based). Ao adicionar o componente, a propriedade System (1) estará vazia (assim como fizemos anteriormente) link o XR Rig. Já a propriedade Turn Amount regula o giro no sentido horário, ou seja, cada vez que o jogador acionar essa propriedade, o XR Rig rotaciona 45º no sentido horário. Além disso, você vai precisar indicar os controles de referência. Clique para selecionar o Preset (3) e escolha a opção XRI Default Snap Turn. Figura 25 – Configurando Snap Turn Provider Para testar o giro, colocamos alguns objetos em cena para que possamos perceber melhor o giro do XR Rig. 18 Figura 26 – Colocando elementos na cena Para ver o giro usando o XR Device Simulator, primeiro acesse o (1) Controller. Você pode fazer isso usando a tecla Tab ou pressionando as teclas T ou Y. Ao entrar no modo de controle dos joysticks, você pode pressionar as teclas A ou D para ver o giro. Figura 27 – Testando o giro com controles 3.2 Área de teletransporte Agora, vamos adicionar uma funcionalidade para melhorar a locomoção. Primeiro, você deve selecionar o XR Rig e adicionar a funcionalidade para se teletransportar. No XR Rig, adicione o componente Teleportation Provider (semelhante ao que fizemos anteriormente) em System link ou Locomotion System. 19 Figura 28 – Adicionando Teleportation Provider Para isso, precisamos adicionar a propriedade “área de teletransporte” no nosso plano. Selecione o plano do seu projeto e adicione o componente Teleportation Area. Esse componente precisa de referências de duas propriedades: (1) Interation Manager, no qual acionamos o XR Interaction Manager, e (2) Teleportation Provider no qual referenciamos o XR Rig. Figura 29 – Configurando Teleportation Area 20 Pronto! Agora você será capaz de se teletransportar para qualquer espeço em cima do objeto (Plane). Se estiver usando o XR Divece Simulator, você pode usar T ou Y para alternar um dos controladores, usar o mouse para mirar e pressionar G para ativar o teletransporte. 3.3 Âncoras de teletransporte Agora, vamos fazer âncoras de teletransporte, ou seja, ao invés de nos movimentarmos livremente, vamos criar locais específicos para ancorar o teletransporte. Primeiro, remova o componente Teleportation Area que colocamos o objeto (Plane) anteriormente. Precisamos fazer isso para melhorar a nossa capacidade de mirar e encontrar o nosso plano de âncora. Agora, crie um objeto Plane (aqui nomeamos como PlaneTeleportAnchor), diminua de tamanho e posicione na frente de um dos objetos. Depois, adicione o componente Teleportation Anchor e faça as configurações em (1) Interaction Manager e (2) Teleportation Provider. Figura 30 – Configurando Teleportation Anchor 21 Agora, vamos colocar um plano na frente de cada objeto. Para agilizar o processo, crie um Prefab com o seu plano com Teleportation Anchor e adicione os Prefabs na cena. Figura 31 – Posicionando âncoras de teletransporte na cena Veja que, quando colocamos o laser point mirando o plano, o ele fica branco; se mirarmos em outro local, ele continua vermelho. Figura 32 – Visualizando áreas de teletransporte 22 TEMA 4 – INTERAÇÃO COM OBJETOS Agora, veremos como podemos pegar objetos na cena. Para que o jogador possa pegar um objeto na realidade virtual, precisamos adicionar o componente XR Grab Interactable. Figura 33 – XR GrabInteractable O XR Grab Interactable tem várias propriedades importantes, mas vamos apresentar aqui algumas das principais: • Movement Type (1): especifica como um objeto se move quando selecionado. • Velocity Tracking: o objeto interativo é movido definindo a velocidade e a velocidade angular do Rigidbody. Use isso se você não quiser que o objeto seja capaz de se mover por meio de outros Colliders sem um Rigidbody. Podemos usar essa função em portas que irão apenas abrir ou 23 fechar. Dessa forma, a porta se moveria com relação à velocidade da sua mão. • Kinematic: o objeto interativo é movido movendo o Rigidbody cinemático em direção à posição e orientação-alvo. Use isso se você quiser manter a representação visual sincronizada para corresponder ao seu estado físico e se quiser permitir que o objeto seja capaz de se mover por meio de outros Colliders sem um Rigidbody. • Instantaneous: o objeto interativo é movido definindo a posição e a rotação do Transform a cada quadro. Use isso se você quiser que a representação visual seja atualizada a cada quadro, minimizando a latência. No entanto, a desvantagem é que será capaz de se mover por meio de outros Colliders sem um Rigidbody. Em Track Position, habilite o movimento suave em Smooth Position (2) e Smooth Rotation (3). Dessa forma, o movimento de posição e rotação serão mais suaves e fluidos para o jogador. 4.1 Attach Transform O Attach Transform (4) funciona como uma âncora para que o jogador pegue o objetivo. Normalmente, colocamos um GameObject vazio como filho e posicionamos o objeto vazio no local onde será pego. Depois, é só adicionar o link do objeto vazio no AtrachTransform. Além disso, veja que ao adicionar o componente XR Grab Interactable foi adicionado também o componente Rigidbody. Veja no exemplo que adicionamos um GameObject vazio como filho da Cube e posicionamos próximo a um vértice do cubo. 24 Figura 34 – Adicionamos um GameObject vazio como filho da Cube Depois, adicionamos o GameObject vazio no Attach Transform do objeto pai. Dessa forma, quando executamos a função de pegar o objeto, a sua âncora (GameObject) determina pela posição que pegamos o objeto. Figura 35 – Segurando o cubo pelo GameObject vazio Da mesma forma que você encontra o Attach Transform no objeto, também é possível configurar essa função no XR Origin (XR Rig). Ao acessar o Left Controller, e/ou o Right Controller, acesse o componente XR Ray Interactor. 25 Lá você irá encontrar Attach Transform e você pode usar a mesma técnica vista anteriormente. Figura 36 – Attach Transform no Left Controller 4.2 Physical Material Encontramos no Unity uma possibilidade de configurar a fisicalidade de um objeto. O Physical Material é um ativo que podemos configurar as propriedades do colisor do material, ou seja, a fricção e a elasticidade. Para criar um Physical Material, clique em Create > Physical Material. 26 Figura 37 – Criando um material físico Ao criar um material físico você irá configurar suas propriedades. Figura 38 – Propriedades do Physic Material • Dynamic Friction: determina quanto de atrito a superfície do colisor tem contra o objeto quando eles estão se movendo ou deslizando um contra o outro. O valor 0 significa nenhum atrito (como gelo), enquanto um valor 1 significa atrito muito alto (como borracha). • Static Friction: especifica o quanto de atrito a superfície do colisor tem contra o objeto quando os colisores não estão em movimento. O valor 0 significa nenhum atrito (como gelo), enquanto um valor 1 significa atrito muito alto (como borracha). 27 • Bounciness (Elasticidade): define o quão saltitante ou elástica é a superfície e quanto outros colisores podem ricochetear no objeto. O valor 0 significa que a superfície não é nada elástica (como argila macia) e outros colisores perdem energia cinética ao atingi-la. Já o valor 1 significa que a superfície é muito elástica (como a borracha) e outros colisores saltam sem qualquer perda de energia cinética. • Friction Combine: define como o sistema físico calcula o atrito entre dois colisores, com base no atrito de cada colisor. Essa seleção se aplica tanto ao atrito dinâmico quanto ao atrito estático. o Maximum: usa o maior dos dois valores; o Multiply: usa a soma de um valor multiplicado pelo outro; o Minimum: usa o menor dos dois valores; o Average: usa a média dos dois valores. • Bounce Combine: define como o sistema físico calcula o salto entre dois colisores, com base no valor de Bounciness de cada colisor. Usa os mesmos parâmetros do Friction Combine. Veja alguns exemplos de como podemos configurar os materiais físicos. Figura 39 – Exemplos de configuração para Physic Material Material de borracha Gelo Metal Dynamic Friction: 0,8 Static Friction: 0,9 Bounciness: 0,8 Friction Combine: Maximum Bounce Combine: Average Dynamic Friction: 0.1 Static Friction: 0.1 Bounciness: 0,01 Friction Combine: Multiply Bounce Combine: Multiply Dynamic Friction: 0.1 Static Friction: 0.2 Bounciness: 0 Friction Combine: Minimum Bounce Combine: Average Aproveite para fazer alguns testes com os diferentes tipos de materiais físicos. Crie 3 Physic Material e vincule com objetos na sua cena, depois tente pegar e arremessar os objetos. Você verá como cada um desses materiais se comporta. TEMA 5 – SOQUETES PARA OBJETOS No campo da realidade virtual, é essencial criar experiências imersivas e interativas. Uma abordagem para alcançar isso é possibilitar que os usuários 28 manipulem objetos dentro do ambiente de RV para realizar ações específicas. Nesse contexto, vamos abordar o conceito de interação por meio de soquete e examinar como implementá-lo utilizando o XR Interaction Toolkit do Unity. 5.1 Soquete O XR Socket Interactor é um componente disponibilizado pelo XR Interaction Toolkit no Unity. Ele serve para estabelecer um local particular, conhecido como soquete, onde um objeto pode ser inserido ou posicionado para desencadear uma ação ou comportamento específico. Essa ferramenta é especialmente útil para criar interações que demandam posicionamento preciso de objetos, como inserir uma chave em uma fechadura ou conectar um plugue a uma tomada. Aqui estão os principais aspectos associados ao XR Socket Interactor: • Attach Transform: essa propriedade especifica a transformação (posição e rotação) onde os objetos serão inseridos ou posicionados; • Interaction Layer Mask: semelhante a outros elementos interativos XR, é possível definir uma máscara de camada para indicar quais objetos podem interagir com o soquete; • Interactor Events: os Interatores do Soquete XR têm a capacidade de acionar eventos quando os objetos são inseridos ou removidos com sucesso do soquete. Veja um exemplo de como criar um Socket. Primeiro (1) criamos um objeto cubo que chamamos de Recipiente e colocamos um material com transparência para que possamos ver o nosso cubo dentro do recipiente. Depois, criamos um GameObject vazio como filho; nele colocamos um componente Sphere Collider (ative a função Is Trigger), que será o colisor que ativa o script XR Socket Interactor. Como filho do objeto Socket criamos um GameObject e chamamos de Attach Point. Posicione o objeto Attach Point no local em que será colocado o cubo; depois clique no objeto Socket e no XR Socket Interactor (2) e link esse objeto no Attach Tranform. 29 Figura 40 – Configurando recipiente do soquete Ao executar a aplicação, você verá algo como a Figura 41. Ao mover o cubo próximo do soquete (1), você verá um novo elemento (2), que é o indicativo de onde o cubo será colocado. Figura 41 – Interação entre objeto e soquete Depois, quando soltar, o cubo será posicionado no local do objeto Attach Point que criamos. 30Figura 42 – Objeto colocado no soquete 5.2 Hover Material O Hover Mesh Meterial é o material que aparece quando entramos na área de colisão no XR Socket Interactor. Figura 43 – Hover Mesh Material no XR Socket Interactor Por padrão, o Unity coloca um material standard em Hover Mesh Meterial. Podemos simplesmente configurar o material Strandard ou criar um material exclusivo. 31 Figura 44 – Criando um material exclusivo para Hover Mesh Material Dessa forma, você pode criar materiais específicos para cada soquete, dando ao jogador um feedback visual sobre os objetos e cores no soquete. Figura 45 – Visualizando o Hover Mesh Material 32 5.3 Múltiplos soquetes Quando temos múltiplos soquetes em cena precisamos especificar qual soquete vai o quê, ou seja, precisamos ter soquetes específicos para cada elemento. Selecione um objeto com o componente XR Socket Interactor. Ao clicar em Interaction Layer Mask, você verá algumas layers marcadas. No nosso caso, as layers estão marcadas como Everything e Default. Figura 46 – Interaction Layer Mask Para criarmos soquetes específicos para cada objeto, precisamos criar layer exclusiva. Então, ao clicar em Add layer... em Interaction Layers, podemos ver várias layers vazias. Vamos criar duas, uma com o nome Socket Red e outra com nome Socket Pink. 33 Figura 47 – Criando duas layers Depois, volte ao objeto e marque apenas a layer relativa ao objeto que queremos. Figura 48 – Configurando layer no soquete Depois, faça o mesmo com o objeto que será colocado no soquete. Figura 49 – Configurando layer no objeto 34 Ao executar a aplicação, você irá perceber que apenas quando a layer do objeto e do soquete coincidem é que será possível a inserção. Figura 50 – Inserindo objetos em soquetes específicos FINALIZANDO Chegamos ao final da nossa aventura pela realidade virtual. Aqui, demos os primeiros passos para criar uma aplicação de RV. O caminho na RV é longo e você verá várias atualizações e funções novamente pelo seu caminho. Recomendamos que você siga criando aplicações simples como a navegação em uma sala ou em uma casa. Implemente as funções básicas que vimos aqui, como giro rápido, área de teletransporte e âncoras de teletransporte. Você também deve avançar os seus conhecimentos sobre a interação com objetos, como pressionar botões, escalar parede, rotacionar objetos e outros. Na cena de exemplo do XR Interaction Toolik (DemoScene), você encontrará várias funções que podem ser aplicadas em diversos contextos. Até mais! 35 REFERÊNCIAS MURRAY, J. W. Building Virtual Reality with Unity and SteamVR. Second Edied. [S. l.]: CRC Press, 2020. UNITY LEARN. 1.1 - VR Project Setup - Unity Learn. [S. l.]: Unity Learn, 2024. Disponível em: . Acesso em: 26 maio 2024. UNITY TECHNOLOGIES. Locomotion System. [S. l.]: Unity Technologies, 2023. Disponível em: . Acesso em: 26 maio 2024. ______. Manual: OpenXR Plugin. [S. l.]: Unity Technologies, 2022. Disponível em: . Acesso em: 26 maio 2024.