Image for post
Image for post
Gustavo Giardi | Desenvolvedor, Technology | everis Brasil

Como integrar realidade aumentada a aplicativos android nativos

A game engine Unity tem se mostrado uma das melhores plataformas para o desenvolvimento de experiências de Realidade Aumentada. Devido a sua interface gráfica, preparo para trabalhar com modelos 3D e fácil integração com Vuforia, ARCore e ARKit, esta oferece o ambiente ideal para a o desenvolvimento de aplicativos com essas tecnologias.

Porém, esta engine traz alguns problemas para o cliente. Por ter sido desenvolvida para a criação de jogos, a Unity não se mostra como a melhor opção para o desenvolvimento de aplicativos comuns. Uma empresa que quer integrar uma experiência AR em seu app raramente o tem desenvolvido soluções em Unity, o que dificulta a integração da cena de Realidade Aumentada ao aplicativo já existente. Exigir que o usuário final baixe um segundo aplicativo só para ter a acesso ao ambiente de Realidade Aumentada também não é uma boa opção, pois este ocupará mais espaço na memória do aparelho e proporcionará uma experiência ruim.

Estes problemas se solucionam com a integração de cenas Unity à apps Android. Dessa forma, toda a experiência AR se encontrará dentro do aplicativo principal já desenvolvido. Assim, o cliente final pode ver interfaces de Realidade Aumentada no aplicativo do mercado, do banco, da seguradora ou em qualquer outro aplicativo já utilizado por ela. Por conta disso, o cliente não precisa se preocupar em fazer o usuário baixar um novo app para oferecer soluções com essa tecnologia, popularizando-a e aumentando o alcance dos seus benefícios.

Prática

Preparando o projeto Unity

O processo de integração de cenas Unity em um aplicativo Android Nativo consiste em exportar o projeto da Unity como uma biblioteca a ser consumida pelo app principal. Para isso, é necessário fazer as seguintes configurações:

· Definir o Texture Compression como ETC2;

· Marcar a checkbox “Export Project”.

Image for post
Image for post

Dessa forma, a Unity criará uma pasta com o projeto editável em Android Studio. Porém, antes de criar esse projeto é necessário preparar o módulo Unity para receber alguns parâmetros do aplicativo principal. Tendo em vista que podemos incluir apenas um projeto Unity no produto final, pode ser necessário criar uma cena inicial responsável por chamar a cena desejada logo em seguida. Para isso, criamos o seguinte script para um objeto da primeira cena:

Este script é responsável por receber o nome da cena desejada que será passado como parâmetro pelo aplicativo principal e chamar a cena Unity de mesmo nome. Para passar outros parâmetros, como identificação do usuário ou configurações específicas do app, basta passar os parâmetros da mesma forma.

Criando a biblioteca

Com o projeto Unity exportado, abrimos o mesmo no Android Studio para configurá-lo como uma biblioteca a ser consumida pelo aplicativo principal. No Android Studio, importamos o projeto para fazer algumas edições:

Image for post
Image for post

Estas edições são importantes para adaptar o projeto para ser consumido pelo aplicativo principal. Primeiro, vamos em “build.gradle” e definimos o projeto como uma biblioteca:

Este script é responsável por receber o nome da cena desejada que será passado como parâmetro pelo aplicativo principal e chamar a cena Unity de mesmo nome. Para passar outros parâmetros, como identificação do usuário ou configurações específicas do app, basta passar os parâmetros da mesma forma.

Criando a biblioteca

Com o projeto Unity exportado, abrimos o mesmo no Android Studio para configurá-lo como uma biblioteca a ser consumida pelo aplicativo principal. No Android Studio, importamos o projeto para fazer algumas edições:

Image for post
Image for post

Estas edições são importantes para adaptar o projeto para ser consumido pelo aplicativo principal. Primeiro, vamos em “build.gradle” e definimos o projeto como uma biblioteca:

Image for post
Image for post

Em seguida, apagamos as linhas que determinavam o Application ID e o Bundle:

Image for post
Image for post
Image for post
Image for post

Por fim, no Android Manifest, basta apagar o Intent Filter:

Image for post
Image for post

Com isso, todas as configurações estão prontas. Para aplicar todas essas edições é necessário fazer dois builds, um para aplicar as alterações do build.gradle e outro para exportar o projeto editado. Feito isso, podemos encontrar os arquivos .aar das cenas Unity e da SDK de Realidade Aumentada utilizada na pasta do projeto:

Image for post
Image for post

Localização do arquivo .aar das cenas Unity.

Image for post
Image for post

Localização dos arquivos .aar da SDK de Realidade Aumentada.

Estes são os arquivos necessários para adicionar as cenas desenvolvidas na Unity no aplicativo Android Nativo. Importando estas bibliotecas no projeto principal torna-se possível chamar as cenas passando parâmetros de um app para o outro.

Integrando a biblioteca ao projeto Android Nativo

No Android Studio com o projeto do aplicativo principal aberto, basta ir em File > New > New Module > Import JAR/AAR Package e importar os arquivos .aar citados acima. Em “build.gradle”, é necessário adicionar a seguinte dependência:

Image for post
Image for post

Assim, já é possível acessar a cena Unity pelo aplicativo Android. Para chama-las, basta usar a seguinte intente, onde Nome_da_cena é o nome da cena desejada na Unity:

Image for post
Image for post

Por fim, em “Manifest.xml”, as cenas Unity devem ser definidas como um novo processo para que, quando finalizadas, voltem para o aplicativo principal:

Image for post
Image for post

Desta forma, para retornar ao aplicativo Android, basta chamar o método “Aplication.Quit()” na Unity.

Conclusão

De maneira resumida, para integrar uma cena de Realidade Aumentada em um aplicativo Android Nativo, basta exportar o projeto Unity, transformá-lo em uma biblioteca e adicioná-la no projeto principal. Porém, alguns fatores devem ser levados em conta durante esse processo:

Não é possível usar o ARCore e o Vuforia no mesmo projeto. Suas bibliotecas entram em conflito mesmo quando suas experiências · AR se encontram em cenas separadas. Por conta disso, é necessário definir qual destas tecnologias será usada logo no início do desenvolvimento;

· Não é possível integrar mais de um projeto Unity no aplicativo Android. A duplicidade de bibliotecas causa um conflito no projeto, o que inviabiliza a combinação de cenas. Para contornar esse problema, basta incluir todas as cenas de Realidade Aumentada em um mesmo projeto. Quando o aplicativo principal chamar a cena Unity, sempre será aberta a mesma cena inicial (de build index = 0). Por conta disso, adicionamos a ela um script que chama outra cena do mesmo projeto levando em conta um parâmetro enviado pelo aplicativo Android. Assim, o app principal determina qual cena AR será iniciada.

Aplicação

A integração das cenas de Realidade Aumentada em um aplicativo Android foi utilizada em um projeto desenvolvido pela everis apresentado na CIAB 2019. Este aplicativo tinha como objetivo guiar o usuário pelo estande da empresa enquanto apresentava casos de uso de diversas tecnologias desenvolvidas pela equipe.

Enquanto o aplicativo Android se responsabilizava pelo fluxo de login, gerenciamento de moedas do app e funcionalidades de reconhecimento facial, as cenas Unity a ele integradas proporcionavam experiências AR sem a necessidade de um segundo aplicativo instalado no aparelho.

Image for post
Image for post

Utilizando a passagem de parâmetros pelo aplicativo Android, as cenas Unity conseguiam ter acesso às informações do usuário, tornando possível uma experiência customizada e o gerenciamento de dados do cliente durante a experiência AR.

Written by

Exponential intelligence for exponential companies

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store