Este guia oferece uma visão geral do desenvolvimento com o Unity para Android XR. O Android XR funciona com as ferramentas e os recursos que você já conhece do Unity. Como o suporte do Unity ao Android XR é baseado no OpenXR, muitos dos recursos descritos na Visão geral do OpenXR também são compatíveis com o Unity.
Siga este guia para saber mais sobre:
- Suporte do Unity para Android XR
- Noções básicas de XR do Unity
- Desenvolvimento e publicação de apps para Android XR
- Pacotes do Unity para Android XR
- Unity OpenXR: pacote Android XR
- Extensões do Android XR para Unity
- Considerações sobre recursos e compatibilidade
- Entrada e interação
Suporte do Unity para Android XR
Ao criar apps Unity para Android XR, você pode aproveitar as ferramentas e os recursos de realidade mista nas versões mais recentes do Unity 6. Isso inclui modelos de realidade mista que usam o XR Interaction Toolkit, o AR Foundation e o plug-in OpenXR para ajudar você a começar rapidamente. Ao criar apps com o Unity para Android XR, recomendamos o pipeline de renderização universal (URP, na sigla em inglês) como seu pipeline de renderização e a Vulkan como sua API de gráficos. Esses recursos permitem que você aproveite alguns dos recursos gráficos do Unity, que são compatíveis apenas com o Vulkan. Consulte o guia de configuração do projeto para mais informações sobre como definir essas configurações.
Noções básicas de XR do Unity
Se você não conhece o desenvolvimento do Unity ou do XR, consulte o Manual de XR do Unity (link em inglês) para entender os conceitos e fluxos de trabalho básicos do XR. O manual de XR contém informações sobre:
- Plug-ins de provedor de XR, incluindo o Unity OpenXR: Android XR e as extensões do Android XR para Unity.
- Pacotes de suporte de XR para adicionar outros recursos no nível do aplicativo.
- Um guia de arquitetura de XR que descreve a pilha de tecnologia de XR do Unity e os subsistemas de XR
- Configuração do projeto de XR
- Como criar e executar apps de XR
- Orientação sobre gráficos de XR, incluindo o pipeline de renderização universal, renderização estereoscópica, renderização foveada, regiões de renderização de várias visualizações e tempo de frame de RV
- Orientação de áudio XR, incluindo suporte para espacializadores de áudio
Desenvolver e publicar apps para Android
O Unity oferece documentação detalhada para desenvolver, criar e publicar para Android, abordando tópicos como permissões do Android no Unity, configurações de build do Android, como criar seu app para Android e como publicar no Google Play.
Pacotes do Unity para Android XR
Há dois pacotes que oferecem suporte à criação de apps Unity para Android XR. Ambos são plug-ins de provedor de XR, que podem ser ativados pelo pacote de gerenciamento de plug-ins de XR do Unity. O gerenciador de plug-ins de XR adiciona as configurações do projeto para gerenciar e oferecer ajuda com o carregamento, a inicialização, as configurações e o suporte de build para plug-ins de XR. Para permitir que o app execute recursos do OpenXR no ambiente de execução, o projeto precisa ter esses recursos ativados pelo gerenciador de plug-ins.
Esta imagem mostra um exemplo de onde você pode ativar esses grupos de recursos pelo editor do Unity.
Unity OpenXR Android XR
O pacote Unity OpenXR Android XR é um plug-in de XR para adicionar suporte ao Android XR ao Unity. Esse plug-in de XR oferece a maior parte do suporte do Android XR para o Unity e permite que dispositivos Android XR sejam compatíveis com projetos do AR Foundation. A AR Foundation foi criada para desenvolvedores que querem criar experiências de RA ou realidade mista. Ela fornece a interface para recursos de RA, mas não implementa nenhum recurso. O pacote Android XR do Unity OpenXR fornece a implementação. Para começar a usar esse pacote, consulte o manual dele, que contém um guia de iniciação.
Extensões do Android XR para Unity
As extensões do Android XR para Unity complementam o pacote do Unity OpenXR para Android XR e incluem recursos adicionais para ajudar você a criar experiências imersivas. Ele pode ser usado sozinho ou em conjunto com o pacote Unity OpenXR Android XR.
Para começar a usar esse pacote, siga nosso guia de configuração do projeto ou o guia de início rápido para importar as extensões do Android XR para Unity.
Considerações sobre recursos e compatibilidade
A tabela a seguir descreve os recursos compatíveis com o pacote Unity OpenXR: Android XR e o pacote Android XR Extensions para Unity. Ela pode ser usada para determinar qual pacote contém os recursos necessários e as considerações de compatibilidade.
Recurso |
Unity OpenXR: string de recurso do Android XR |
String de recurso das extensões do Android XR para Unity |
Casos de uso e comportamento esperado |
|---|---|---|---|
Android XR: sessão de RA
|
Android XR (extensões): gerenciamento de sessões
|
Para usar os recursos de qualquer um dos pacotes, é necessário ativar o recurso de sessão de RA para esse pacote. É possível ativar os dois conjuntos de atributos ao mesmo tempo. Os recursos individuais vão lidar com os conflitos de acordo. |
|
N/A |
N/A |
O rastreamento de dispositivos é usado para monitorar a posição e a rotação do dispositivo no espaço físico. O GameObject de origem de XR processa automaticamente o rastreamento de dispositivos e transforma os rastreáveis no sistema de coordenadas do Unity usando o componente XROrigin e a hierarquia do GameObject com uma câmera e um TrackedPoseDriver. |
|
Android XR: câmera de RA |
N/A |
Esse recurso oferece suporte para estimativa de luz e passagem em tela cheia. |
|
Android XR: plano de RA |
N/A |
Esse recurso oferece suporte para detectar e rastrear superfícies planas no ambiente físico. |
|
N/A |
Android XR (extensões): rastreamento de objetos |
Esse recurso oferece suporte para detectar e rastrear objetos no ambiente físico, usado em combinação com uma biblioteca de objetos de referência. |
|
Android XR: AR Face
|
Android XR: captura de expressões faciais
|
O suporte aos olhos do avatar é fornecido pelo recurso Android XR: AR Face. Acessar as expressões faciais de um usuário pelo recurso de captura de expressões faciais do Android XR. Esses dois recursos podem ser usados juntos. |
|
Android XR: AR Raycast
|
N/A |
Esse recurso permite projetar um raio e calcular a interseção entre ele e os rastreáveis de plano ou de profundidade detectados no ambiente físico. |
|
Android XR: âncora de RA |
N/A |
A âncora de RA é compatível com âncoras espaciais, planas e permanentes usando o AR Foundation. |
|
Android XR: oclusão de RA
|
N/A |
A oclusão permite que o conteúdo de realidade mista no seu app apareça oculto ou parcialmente obscurecido atrás de objetos no ambiente físico. |
|
Métricas de desempenho |
Métricas de performance do Android XR |
N/A |
Use esse recurso para acessar métricas de performance de dispositivos Android XR. |
Suporte à camada de composição (o plug-in OpenXR e a camada de composição XR são necessários) |
Android XR: camada de composição de passagem
|
Use o suporte à camada de composição do Unity para criar camadas de composição básicas (por exemplo, quad, cilindro, projeção). Android XR: a camada de composição de passagem pode ser usada para criar uma camada de passagem com uma malha personalizada, lendo o GameObject do Unity. |
|
Renderização foveada (o plug-in OpenXR é obrigatório)
|
Foveação (legado) |
A renderização foveada permite acelerar a renderização ao diminuir a resolução das áreas na visão periférica do usuário. O recurso de renderização foveada do Unity só é compatível com apps que usam URP e Vulkan. O recurso de foveação (legado) nas extensões do Android XR para Unity também é compatível com o pipeline de renderização integrado e o OpenGL ES. Recomendamos usar o recurso de renderização foveada do Unity sempre que possível. Além disso, o URP e o Vulkan são recomendados ao criar para o Android XR. |
|
N/A |
Esse recurso define o modo de origem de rastreamento do XRInputSubsystem como Unbounded. Unbounded indica que o XRInputSubsystem rastreia todos os InputDevices em relação a uma âncora de mundo, que pode mudar. |
||
N/A |
Modo de mesclagem do ambiente |
Esse recurso permite definir o modo de combinação de ambiente de XR, que controla como as imagens virtuais se misturam ao ambiente do mundo real quando o passthrough está ativado. |
|
N/A |
Permite que o |
||
N/A |
Fornece estratégias de configuração de autenticação de sessão (chave de API, sem chave e token de autenticação) para serviços de apoio baseados na nuvem. |
||
N/A |
Estende o ARFace do Unity com modalidades de captura de expressões faciais multimodais e configuráveis ( |
||
N/A |
Permite consultar o status da bateria e o nível de carga dos controles conectados e dos caminhos de entrada usando |
||
Android XR: câmera de RA |
N/A |
Permite consultar e definir níveis de escurecimento do Passthrough do mundo real usando o ARCameraFeature do Unity. |
|
N/A |
Enumera as propriedades de extensão do ambiente de execução e os recursos do dispositivo usando |
||
N/A |
Permite consultar estados de pré-lançamento do ambiente de execução (incluindo o modo de combinação do ambiente, a opacidade de passagem e as modalidades de entrada ativas) usando |
||
Android XR: caixa delimitadora de RA |
Oferece suporte à detecção de caixas delimitadoras para objetos 3D no ambiente físico usando o framework de entidades espaciais do OpenXR ( |
||
N/A |
Amplia os recursos de âncora usando |
||
N/A |
Permite que o conteúdo do aplicativo seja renderizado em um contêiner volumétrico 3D gerenciado pelo sistema no Modo de Espaço Ampliado, com APIs e eventos de callback em |
Entrada e interação
O Android XR é compatível com entrada natural multimodal.
Além do rastreamento de mãos e acompanhamento ocular, também há suporte para periféricos, como controles 6DoF, mouse e teclado físico. Isso significa que os apps para Android XR precisam oferecer suporte à interação manual, e não se pode presumir que todos os dispositivos virão com controles.
Perfis de interação
O Unity usa o perfil de interação para gerenciar como seu aplicativo XR se comunica com vários dispositivos e plataformas XR. Esses perfis estabelecem as entradas e saídas esperadas para diferentes configurações de hardware, promovendo a compatibilidade e a funcionalidade consistente em várias plataformas. Ao ativar os perfis de interação, você garante que o aplicativo de XR funcione corretamente com diferentes dispositivos, mantenha um mapeamento de entrada consistente e tenha acesso a recursos específicos de XR. Para definir um perfil de interação:
- Abra a janela Configurações do projeto (menu: Edit > Configurações do projeto).
- Clique em XR Plug-in Management para abrir a seção de plug-ins (se necessário).
- Selecione OpenXR na lista de plug-ins de XR.
- Na seção Interaction Profiles, selecione o botão + para adicionar um perfil.
- Selecione o perfil que você quer adicionar na lista.
Interação com as mãos
A interação com as mãos (XR_EXT_hand_interaction) é fornecida pelo
plug-in do OpenXR, e você pode expor o layout do dispositivo <HandInteraction>
no sistema de entrada do Unity ativando o perfil de interação
com as mãos. Use esse perfil de interação para entrada
manual com suporte das quatro poses de ação definidas pelo OpenXR: "pinça", "toque",
"mira" e "segurar". Se você precisar de mais funcionalidades de interação ou captura de movimentos das mãos, consulte XR Hands nesta página.
Interação com o olhar
A interação com o olhar (XR_EXT_eye_gaze_interaction) é
fornecida pelo plug-in OpenXR, e você pode usar esse layout para recuperar os dados de pose
dos olhos (posição e rotação) que a extensão retorna. Leia mais sobre
a interação com o olhar no guia de entrada do OpenXR.
Interação com o controle
O Android XR é compatível com o perfil do controle Oculus Touch para controles 6DoF. Ambos os perfis são fornecidos pelo plug-in OpenXR.
Interação com o mouse
O perfil de interação do mouse do Android XR (XR_ANDROID_mouse_interaction)
é fornecido pelas extensões do Android XR para Unity. Ele expõe um
layout de dispositivo <AndroidXRMouse> no sistema de entrada do Unity.
Interação com o gesto de palma da mão
O plug-in OpenXR oferece suporte à interação de pose da palma da mão (XR_EXT_palm_pose), que expõe o layout <PalmPose> no sistema de entrada do Unity.
A pose da palma da mão não é uma alternativa a extensões ou pacotes que
realizam a captura de movimentos das mãos para casos de uso mais complexos. Em vez disso, ela pode ser usada para
colocar conteúdo visual específico do app, como visuais de avatar. A pose da palma consiste
na posição e na orientação da palma.
XR Hands
O pacote XR Hands permite acessar dados de captura de movimentos das mãos usando
XR_EXT_hand_tracking e
XR_FB_hand_tracking_aim, além de fornecer um wrapper para converter
dados de articulações das mãos da captura de movimentos das mãos em poses de entrada. Para usar os recursos fornecidos pelo pacote XR Hands, ative os recursos Captura de movimentos das mãos Subsystem e Meta Captura de movimentos das mãos Aim OpenXR.
O pacote de mãos XR
pode ser útil se você precisar de dados mais granulares de pose ou articulação da mão ou
quando precisar trabalhar com gestos personalizados.
Para mais detalhes, consulte a documentação do Unity sobre como configurar o XR Hands no seu projeto.
Regiões de confiança da captura de expressões faciais
A extensão XR_ANDROID_face_tracking fornece valores de confiança para três
regiões faciais: superior esquerda, superior direita e inferior. Esses valores, que variam
de 0 (nenhuma confiança) a 1 (confiança máxima), indicam a precisão da
captura de expressões faciais em cada região.
Você pode usar esses valores de confiança para desativar progressivamente as formas de mesclagem ou aplicar filtros visuais (como desfoque) à região correspondente do rosto. Para um básico, desative as blendshapes na região do rosto correspondente.
A área da "parte inferior do rosto" representa tudo abaixo dos olhos, incluindo a boca, o queixo, a bochecha e o nariz. As duas regiões superiores incluem os olhos e a área das sobrancelhas nos lados esquerdo e direito do rosto.
O snippet de código C# a seguir demonstra como acessar e usar os dados de confiança em um script do Unity:
using UnityEngine;
using Google.XR.Extensions;
public class FaceTrackingConfidence : MonoBehaviour
{
void Update()
{
if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
{
DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
return;
}
else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
{
DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
return;
}
for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
{
switch (x)
{
case (int)XRFaceConfidenceRegion.Lower:
regionText = "Bottom";
break;
case (int)XRFaceConfidenceRegion.LeftUpper:
regionText = DebugTextConfidenceLeft;
break;
case (int)XRFaceConfidenceRegion.RightUpper:
regionText = DebugTextConfidenceRight;
break;
}
}
}
Para mais informações, consulte a documentação das extensões do Android XR para Unity.
Escolher uma forma de renderizar as mãos
O Android XR oferece duas maneiras de renderizar mãos: uma malha de mão e um visualizador pré-fabricado.
Malha de mão
O pacote do Unity para Android XR contém um recurso de malha de mão que fornece
acesso ao XR_ANDROID_hand_mesh extension. O recurso de malha de mão
fornece malhas para as mãos do usuário. A malha de mão contém vértices de
triângulos que representam a geometria de uma mão. Esse recurso é usado para fornecer uma malha personalizada que representa a geometria real das mãos do usuário para visualização.
Prefab XR Hands
O pacote XR Hands contém um exemplo chamado Hands visualizer, que contém mãos esquerda e direita totalmente equipadas para renderizar a representação adequada ao contexto das mãos do usuário.
Gestos do sistema
O Android XR inclui um gesto do sistema para abrir um menu em que os usuários podem voltar, abrir o acesso rápido ou ter uma visão geral dos apps em execução. O usuário pode ativar esse menu do sistema usando um gesto de pinça com a mão dominante.
Quando o usuário estiver interagindo com o menu de navegação do sistema, o aplicativo
vai responder apenas aos eventos de rastreamento da cabeça. O pacote XR Hands pode detectar quando
um usuário realiza ações específicas, como interagir com esse menu de navegação
do sistema. Verificar AimFlags, SystemGesture e DominantHand permite que você saiba
quando essa ação do sistema é realizada. Para mais informações sobre AimFlags, consulte a
documentação do Enum MetaAimFlags do Unity.
XR Interaction Toolkit
O pacote XR Interaction Toolkit é um sistema de interação de alto nível baseado em componentes para criar experiências de RV e RA. Ele oferece um framework que disponibiliza interações 3D e de interface em eventos de entrada do Unity. Ele oferece suporte a tarefas de interação, incluindo retorno tátil, feedback visual e locomoção.
OpenXR™ e o logotipo do OpenXR são marcas registradas do The Khronos Group Inc. e são registradas como marcas na China, na União Europeia, no Japão e no Reino Unido.