Criando um jogo AR com Vuforia


[Existem GIFs 3D embaixo do corte]

A realidade aumentada (RA) tornou-se repentinamente um termo muito popular. Graças ao Vuforia, os desenvolvedores podem complementar facilmente o mundo físico com conteúdo digital.

Embora o lançamento do ARKit e ARCore tenha ajudado a aumentar a popularidade da realidade aumentada, outras plataformas e SDKs já existiam. Um deles era Vuforia; e, recentemente, a Unity firmou um contrato de parceria com a Vuforia e integrou essa plataforma de AR ao mecanismo de jogo Unity.

Neste tutorial, criarei um jogo de realidade aumentada usando o Vuforia SDK integrado ao mecanismo Unity. No processo, falarei sobre os seguintes componentes principais:

  • Configurar a transferência de dados da câmera de realidade aumentada
  • Rastreamento de imagens - o que é e como funciona
  • Anexando conteúdo digital a um objeto físico
  • Crie interações personalizadas que são acionadas dependendo do que a câmera vê

Nota: este tutorial sobre Vuforia pressupõe que você já conhece os conceitos básicos de desenvolvimento no Unity. Se você é novo no Unity, confira o ótimo tutorial Introdução ao Unity .

Desenvolvimento de jogos de realidade aumentada no Unity


Existem muitos dispositivos de RA no mercado, mas o principal objetivo dos aplicativos de RA é o espaço móvel de plataformas como iOS e Android. É aqui que a combinação de Unity e Vuforia é conveniente - no desenvolvimento de plataforma cruzada. Outra vantagem é que o aplicativo pode ser testado no editor. Para isso, você só precisa de uma webcam!

Antes de começar, faça o download da versão mais recente do Unity e instale o componente Vuforia Augmented Reality Support . Se você usa o Unity Hub , pode adicionar este componente a uma versão já instalada do Unity.


Começando a trabalhar


Agora que você possui o Unity, o Vuforia e uma webcam, é necessário fazer o download de um projeto de amostra ( daqui ).

Após o download, extraia os arquivos e abra o projeto Como criar um jogo de realidade aumentada usando o Vuforia Starter no Unity. Quando o projeto for carregado, abra a cena Starter na pasta Scenes e observe a janela Hierarchy:


Depois de revisar a composição do projeto, clique no botão Reproduzir no editor para preencher o pedido no nosso jogo de pizza.


Ótimo, podemos brincar de pizza, mas nosso verdadeiro desafio é transformar isso em um jogo de realidade aumentada.

Nota: Os ativos da interface do usuário para este tutorial foram baixados do shareicon.net
.

Conheça o Chef Vuforia


Para fazer isso, precisamos fazer com que a pizza virtual apareça na imagem do rastreador que possuímos no mundo real. Depois de adicionar o recheio ao pedido, você pode "servir" fisicamente a pizza, tirando-a da visibilidade da câmera ...

Mas tudo tem seu tempo. Primeiro, você precisa substituir a câmera principal por uma câmera AR . Remova a câmera principal da cena e clique com o botão direito do mouse na hierarquia .

Em seguida, adicione Vuforia -> AR Camera . Isso abrirá esta janela:


Clique em Importar e aguarde o Pacote Vuforia ser importado para o projeto, e alguns arquivos serão adicionados.


Você pode ignorar os novos arquivos nas pastas Editor e Streaming Assets . Estes são apenas modelos; Os arquivos que precisamos estão incluídos no projeto.

A pasta Vuforia contém todos os prefabs e scripts usados ​​pela plataforma Vuforia que iremos usar.

Também vale a pena mencionar o arquivo VuforiaConfiguration dentro da pasta Resources . Este arquivo foi adicionado porque é necessária uma licença para desenvolver o aplicativo Vuforia. No entanto, se desejar, você pode obter uma licença de desenvolvedor gratuita para o Vuforia Developer Portal .

Nota: se o seu projeto não tiver uma Chave de Licença de Aplicativo, ela poderá ser encontrada no arquivo LEIA-ME. Copie a linha no campo inspetor do arquivo VuforiaConfiguration .

Agora que temos a Câmera AR em cena, só há uma coisa a fazer: ativar a Realidade Aumentada!

Vá para Editar -> Configurações do projeto -> Player . Role para baixo até as opções XR Settings e verifique se a caixa de seleção Vuforia Augmented Reality Supported está marcada.

Clique no editor do Play e diga olá para si mesmo!


Nota: se você clicou em play e a tela “Falha na inicialização do Vuforia” aparece, tente reiniciar o Unity. Este é um erro aleatório que aparece apenas em alguns sistemas.

Introdução ao reconhecimento de padrões


Admirar-se é ótimo, é claro, mas não íamos fazer um jogo de pizza?

Por padrão, o Vuforia funciona com o reconhecimento de imagem . O reconhecimento de padrões, também chamado de Tracker Recognition ou Image Tracking, é um processo no qual uma câmera reconhece uma imagem predefinida e sabe o que fazer com ela, por exemplo, renderiza algum conteúdo sobre ela. Isso funciona melhor quando a imagem de rastreamento, de alguma forma, corresponde ao conteúdo, por exemplo, plantas baixas para renderização de construção funcionam bem na parte superior da imagem com a construção.

Como funciona: é muito importante escolher uma imagem de boa qualidade para rastreamento. Ao usar o Vuforia, você pode carregar a imagem selecionada no portal do desenvolvedor para verificar a qualidade de seu rastreamento, e isso deve ser feito antes de iniciar o desenvolvimento. O portal do desenvolvedor atribui uma classificação à imagem, mas, mais importante, mostra seus "pontos característicos". Para que o rastreador seja bom, esses pontos característicos (pontos de destaque) devem ser densamente distribuídos sobre a imagem e não deve haver nenhum padrão repetitivo neles. Em tempo de execução, a câmera procura esses pontos característicos para calcular sua localização em relação à imagem.

Para este tutorial, o banco de dados de imagem e rastreamento já está configurado. A imagem da pizza está localizada na pasta Materiais que você baixou anteriormente. Idealmente, imprima-o. Ou você pode abri-lo em algum dispositivo digital e depois "mostrá-lo" para a câmera. Veja como é a imagem no banco de dados do Vuforia Tracker:


Como você pode ver, os pontos característicos estão bem distribuídos. Também é pizza, o que é conveniente!

Adicionando destinos de imagem à cena



É hora de fazer a mágica! Faremos uma pizza virtual aparecer em cima da nossa pizza. Novamente, use o menu Criar na Hierarquia e selecione Vuforia -> Imagem .

Agora temos um GameObject de destino de imagem em cena. Olhe para este alvo no inspetor e você verá vários componentes. Os mais importantes são o Comportamento do destino da imagem e o manipulador de eventos rastreáveis ​​padrão . Examinaremos o segundo com mais detalhes posteriormente, mas, por enquanto, verifique se as opções da lista suspensa Comportamento de destino da imagem estão configuradas da seguinte maneira:

  • O banco de dados está definido como RW_ItsaPizza
  • Destino da imagem definido como PizzaClipArt


Lembra dos arquivos adicionados anteriormente ao projeto que eu pedi para ignorar? Você os encontrou! A Vuforia está adicionando vários bancos de dados de amostra do Image Target para que possamos começar a desenvolver e usá-los como exemplo, como o que estamos usando, já adicionado aos materiais.

Nota: o Pizza Tracker é o único destino de imagem no seu banco de dados; no entanto, pode haver centenas de imagens em um banco de dados. Além disso, pode haver vários bancos de dados em um aplicativo.

Agora que configuramos a Câmera AR e o Rastreador de imagens em cena, temos tudo o que você precisa para que a realidade aumentada funcione! No Editor, clique no botão Reproduzir e coloque a imagem impressa na frente da câmera.


Temos pizza!

Anexando objetos de jogo aos rastreadores como objetos filhos


A pizza é um pouco pequena, mas está firmemente presa à imagem do rastreador. Você também pode notar que, se você remover a imagem rastreada, a pizza permanecerá no ar.

O fato é que, enquanto a webcam pode ver o rastreador de imagens , Vuforia é capaz de atualizar a posição da câmera AR na cena. Se você quiser ver isso em ação, configure o Unity Editor para que as janelas Game e Scene fiquem visíveis ao mesmo tempo, selecione AR Camera e clique em Play.


Como fazer com que a pizza se comporte corretamente quando a câmera está funcionando? Selecione ImageTarget na hierarquia. Você verá que sua escala em cada eixo é 10 . Isso é controlado pelo componente Image Target Behavior . Na seção avançada, você pode ver que o parâmetro Width tem um valor 10 . Foi definido quando a imagem foi carregada no site do desenvolvedor da Vuforia.

Dica: você não entende por que o Image Target foi definido como largura 10 neste tutorial? Quando o tamanho não é um fator significativo para o aplicativo, defini-lo como 10 fornece à câmera uma maior probabilidade de rastreamento, mantendo uma boa posição para o conteúdo entre os planos próximos e distantes da câmera AR. No entanto, às vezes é necessário que a realidade aumentada tenha uma certa escala. Nesse caso, você precisa definir o tamanho do rastreador de imagens para que ele corresponda às medidas físicas ao fazer o upload no portal do desenvolvedor.

Agora selecione Pizza GameObject na Hierarquia . Arraste-o para ImageTarget para torná-lo filho. A escala mudará para (X: 0.1, Y: 0.1, Z: 0.1) . Retorne aos valores (X: 1, Y: 1, Z: 1) e também mude a Posição até 0.01 ao longo do eixo Y. Graças a isso, a Pizza estará em conformidade com o ImageTarget .


Pressione Reproduzir novamente e você verá que a pizza está sobre a imagem e também desaparece quando a imagem desaparece do quadro.


Explorando DefaultTrackableEventHandler


Esse comportamento é obtido do DefaultTrackableEventHandler do ImageTarget . Abra o script e visualize-o.

O script é bem comentado, mas vale a pena prestar atenção em alguns aspectos:

  • A função Iniciar registra esse script como um manipulador de eventos para o TrackableBehaviour (nesse caso, ImageTargetBehaviour ).
  • OnDestroy remove esse link.
  • OnTrackableStateChanged é a função mais importante. O código dela diz o que deve acontecer quando o estado de rastreamento é alterado.
  • OnTrackingFound e OnTrackingLost são chamados de OnTrackableStateChanged . No DefaultTrackableEventHandler, eles alternam os componentes Renderer , Collider e Canvas de qualquer filho.

Quando a câmera detecta uma imagem, ela não move mais a Câmera AR ; ela também ordena que o GameObject Pizza ative todos os seus componentes Renderer e, quando a imagem desaparece da câmera, ele novamente ordena que os desative.


Diger esta informação por enquanto.

Crie suas próprias ações de rastreamento


É hora de fazer algo com esta informação!

Remova o componente DefaultTrackableEventHandler do ImageTarget . Em seguida, adicione o PizzaTrackableEventHandler , que pode ser encontrado na pasta Scripts . Em seguida, abra PizzaTrackableEventHandler . Este é um clone de DefaultTrackableEventHandler , mas o código em OnTrackingFound e OnTrackingLost foi excluído - você precisa resolver esse problema!

Habilitar e desabilitar os componentes do Renderer é útil em quase todos os aplicativos de recuperação de direitos, então vamos recuperar esse código. Se você ficar preso, você pode copiá-lo do DefaultTrackableEventHandler ou encontrá-lo no spoiler abaixo.

Código
 protected virtual void OnTrackingFound() { var rendererComponents = GetComponentsInChildren<Renderer>(true); // Enable rendering: foreach (var component in rendererComponents) { component.enabled = true; } } protected virtual void OnTrackingLost() { var rendererComponents = GetComponentsInChildren<Renderer>(true); // Enable rendering: foreach (var component in rendererComponents) { component.enabled = false; } } 

Estamos prontos para transformar esse projeto em um jogo de realidade aumentada!

Veja a interface do usuário e encontre o botão que o jogador precisa pressionar para concluir a pizza.


Como você pode ver, quando um botão é pressionado, o evento GameManager.CompleteOrder() chamado. Em vez de forçar o jogador a pressionar o botão, verifique se ele "serviu" a pizza para concluir o pedido (movendo o rastreador para fora da visibilidade da câmera).

No início de PizzaTrackableEventHandler, adicione um UnityEvent para chamar quando Image perder o rastreamento.

 using Vuforia; using UnityEngine; using UnityEngine.Events; public class PizzaTrackableEventHandler : MonoBehaviour, ITrackableEventHandler { public UnityEvent OnTrackingLostEvent; ... 

Agora vamos chamar o evento no método OnTrackingLost :

 protected virtual void OnTrackingLost() { var rendererComponents = GetComponentsInChildren<Renderer>(true); // Enable rendering: foreach (var component in rendererComponents) { component.enabled = false; } //Trigger our event OnTrackingLostEvent.Invoke(); } 

Isso torna o PizzaTrackableEventHandler mais flexível, porque agora podemos definir a execução de qualquer ação se o rastreamento for perdido. Salve o PizzaTrackableEventHandler , retorne ao Unity Editor e aguarde a conclusão da compilação. Quando terminar, faça com que GameManager.CompleteOrder() chamado quando o rastreador de pizza de rastreamento for perdido. Por fim, desative ou remova o CompleteOrderButton na interface do usuário.


Salve a cena, clique em Reproduzir e sirva pizza!


Para onde ir a seguir


Parabéns, você concluiu o tutorial!

Um exemplo de projeto pode ser baixado aqui .

Para obter mais informações sobre como desenvolver o Vuforia no Unity, consulte a Biblioteca do desenvolvedor do Vuforia ou o tutorial do Unity .

Não se esqueça de configurar uma conta de desenvolvedor no portal Vuforia . Você também pode tentar enviar vários rastreadores diferentes para verificar como eles são rastreados.

Para mais detalhes, leia sobre os botões virtuais . O site da Vuforia possui materiais de amostra. Verifique se você pode criar esses botões virtuais para substituir a interface do usuário em um jogo de pizza.

Crie novas idéias para jogos de realidade aumentada. Talvez este seja um jogo de luta com cartas em que criaturas pulam diretamente das cartas? E em defesa da torre, onde você controla um helicóptero de combate usando seu telefone?

Source: https://habr.com/ru/post/pt440592/


All Articles