Este guia descreve um ciclo típico de desenvolvimento de jogos. Depois de ler isto ou um guia prático, também pode ser útil como referência.
Quando você trabalha com o Unity, o ciclo de vida de desenvolvimento consiste em três fases:
- Planejamento e projeto
- Desenvolver e testar
- Publicar e manter
Planejamento e projeto
Na fase de planejamento e design, você determina como criar o jogo. Você decidir como lidar com os desafios do desenvolvimento para dispositivos móveis e identificar as ferramentas e processos para usar no desenvolvimento.
Receba informações de todos os membros da equipe
Trabalhe com arte, engenharia, design, áudio e as equipes de produção para identificar e registrar as tarefas de implementação. Exemplo:
- As equipes de arte podem criar orçamentos de textura e malha de recursos para os personagens e ambientes.
- A engenharia pode determinar checkpoints de memória e desempenho para a criação de perfis em cada plataforma.
- O design pode planejar a mecânica do jogo que possibilita a experiência.
- Os especialistas em áudio podem analisar os requisitos de continuidade do som entre Sons espaciais da interface do usuário, 2D e 3D.
- A produção pode comunicar os requisitos de lançamento e manter alinhadas e no caminho certo.
Design para dispositivos móveis
O desenvolvimento de apps para plataformas móveis envolve considerações específicas, como:
- Proporções de tela variáveis
- Consumo de energia
- Limitação térmica e do processador
- Entrada por toque
- Desenvolvimento multiplataforma
- APIs gráficas (Vulkan ou OpenGL ES)
Para obter detalhes sobre considerações exclusivas do design voltado a dispositivos móveis, consulte Desenvolvimento para Android no Unity do Unity, e a Academia do Google Play.
Desenvolver e testar
Na fase de desenvolvimento e teste, você cria o jogo e testa e a preparação de pré-lançamento. Você faz algumas verificações internas testes no Google Play para prepará-lo para atender aos requisitos de lançamento. Você refina estratégia de implantação e organizar recursos no Unity com base na Play Asset Delivery (link em inglês) e Unity Addressables (link em inglês) sistemas.
As seções a seguir descrevem as ferramentas e técnicas do Unity projetadas para ajudar você a desenvolver para Android.
Renderização
Renderização é o processo de desenhar os recursos 3D e 2D da cena do Unity na tela. O mecanismo do Unity cuida da renderização, é importante considerar alguns fatores para a plataforma Android.
Texturas
Determine se você precisa dos maiores tamanhos de textura com base no alvo dispositivos. Quando você cria um perfil alocação de memória, analisar a possível economia com a mudança da meta tamanho da textura.
Tempo para a renderização do frame
Para evitar o superaquecimento em dispositivos Android, defina o tempo para a renderização do frame desejado menores que 21 milissegundos, em média. Às vezes, como durante ou experiências cinematográficas curtas, os tempos para a renderização do frame pode exceder 21 milissegundos, mas você deve ficar abaixo da de milissegundos para a experiência principal do jogo.
Em plataformas móveis, o VSync forçado limita o frame rate se você não atingir a meta mínima. Por exemplo, em uma atualização de tela de 60 Hz, se você não atingir 60 fps, seu jogo será limitado a 30 se não atingir 30, você será limitado a 15.
Muitos dispositivos Android vêm com taxas de atualização de tela de 60 Hz e 120 Hz. Avalie os benefícios de se concentrar em tempos de renderização muito menores (objetivo de 10 ms para atualização de 60 Hz e 5 ms para 120 Hz) sem o risco da limitação térmica e consumo elevado de bateria para taxas de renderização mais altas.
Para definir um frame rate específico no seu jogo no Unity, use Application.targetFrameRate.
A biblioteca Frame Pacing do Android ajuda você a renderizar. suavemente quando seu aplicativo demora mais para apresentar o próximo frame do que a taxa de atualização da tela exige. Para as versões do Unity 2021 e mais recentes, A ativação do ritmo de frames do Android define a taxa de atualização da tela como o melhor correspondência para o frame rate desejado. Isso garante que o jogo não desperdiça energia da bateria com atualizações desnecessárias da tela.
Para ativar a biblioteca, acesse Configurações do projeto > Player, em Settings for Android, marque a caixa de seleção Optimized Frame Pacing.
![Caixa de diálogo mostrando "Project Settings" > Configurações do player > Ritmo da fama otimizado](/static/images/games/engines/unity/unity-projectsettings-player.png)
Vulkan API
Vulkan é uma ferramenta 3D de alto desempenho e multiplataforma API gráfica que tem baixa sobrecarga em comparação com o OpenGL ES. O Unity pode usar o Vulkan de duas maneiras diferentes.
API Auto Graphics
Você pode usar a API Auto Graphics com o Vulkan, mas ela pode ter diferentes dependendo da versão do Unity instalada. Selecione isso acessando Configurações do projeto > Jogador > Renderização.
Ao escolher qual versão do Unity será usada, considere o seguinte: usar:
- O Unity 2021.1 e versões anteriores não oferecem suporte ao Vulkan com o Auto API Graphics. O Unity tenta usar o OpenGL ES 3.2. Se o dispositivo não oferecer suporte OpenGL ES 3.2, o Unity volta para o OpenGL ES 3.1, 3.0 ou 2.0, nessa ordem.
- O Unity 2021.2 e versões mais recentes usam o Vulkan primeiro. Se o dispositivo não oferecer suporte ao Vulkan, o Unity voltará para o OpenGL ES 3.2, 3.1, 3.0 ou 2.0.
![Configurações do projeto > Configurações do player > Renderização > API Auto Graphics](/static/images/games/engines/unity/unity-auto-graphics-api.png)
APIs gráficas manuais
Como alternativa, você pode ativar o Vulkan manualmente desativando a API Auto Graphics. Se você estiver usando o Unity 2021.1 ou uma versão anterior, essa é a única maneira de usar Vulkan.
Se o Vulkan estiver em posição mais alta nessa lista do que o OpenGL ES, o Unity primeiro tentará usar Vulkan. Se o dispositivo não tiver suporte ao Vulkan, o Unity será executado com o OpenGL ES. Consulte Começar a usar o Vulkan para conferir informações detalhadas sobre o Vulkan no Android, como a usar APIs gráficas modernas e otimizar o desempenho do seu jogo.
![Configurações do projeto > Configurações do player > Renderização > APIs gráficas](/static/images/games/engines/unity/unity-graphics-apis.png)
Chamadas de desenho
Tudo o que é exibido na tela está associado a uma ou mais chamadas de desenho. Ativado plataformas móveis, você deve otimizar e reduzir o número de chamadas de desenho que que você envia para a unidade de processamento gráfico (GPU).
Pense nas chamadas de desenho como a semelhança de carros enfileirados em um semáforo. Após o a luz fica verde, um certo número de carros pode passar antes que a luz mudanças. A luz amarela indica que você atingiu o frame ideal. (21 milissegundos), e quando a luz fica vermelha, você atingiu o horário de milissegundos para a renderização do frame. Qualquer coisa além que impacta o próximo frame de renderização, para que o frame rate resultante seja menor do que a meta de 30 fps.
Para saber como melhorar o desempenho da chamada de desenho no seu jogo, consulte agrupamento em lotes do suporte do Unity.
Sombras
As chamadas de desenho da transmissão de sombra podem ser as mais intensas, consumindo mais Tempo de GPU, mesmo para ambientes simples. Para reduzir o custo da transmissão de sombras de desenho, experimente usar sombras fortes em vez de suaves. Se isso ainda é muito caro em GPU para dispositivos mais simples, considere usar sombras de blobs em vez de sombras fortes.
Textura
A textura recomendada o formato de compactação para texturas RGB e RGBA no Android é ASTC. No Unity, a opção mínima de compactação de textura que você deve usar no Android é o ETC2. Você pode voltar para o ETC2 porque backup do ASTC em Unity Build Settings.
Encontre uma lista completa de formatos compatíveis por plataforma na documentação do Unity em Manual: formatos de textura recomendados, padrão e compatíveis por plataforma
Interface do usuário e proporções
Use a biblioteca de cliente Simulador de dispositivo para visualizar várias resoluções de tela, orientações e proporções diretamente no Editor do Unity. É possível alternar entre a Visualização de jogos e visualização do simulador de dispositivo.
Acesse uma prévia da ferramenta em Simule seu jogo com o simulador de dispositivo no Unity.
![](https://developer.android.com/static/images/games/engines/unity/unity-trivialkart-scene.png?authuser=9&hl=pt)
O código-fonte do Trivial Kart games-samples (link em inglês) no GitHub.
Você pode verificar rapidamente o layout e a exatidão dos elementos da tela da IU no Visualização do simulador de dispositivo selecionando opções do dispositivo no menu suspenso menu:
![Configurações do projeto > Configurações do player > Ritmo otimizado de frames](/static/images/games/engines/unity/unity-multiple-device-test.png)
![Configurações do projeto > Configurações do player > Ritmo da fama otimizado](/static/images/games/engines/unity/unity-package-manager.png)
Para ver mais técnicas de otimização de interface para Unity, consulte o tutorial a seguir Unity: Como otimizar a interface do Unity (em inglês).
Física
O mecanismo Nvidia PhysX está integrado ao Unity. As configurações padrão pode custar caro em dispositivos móveis. Portanto, lembre-se das seguintes considerações:
- Considere o frame rate desejado e defina o intervalo fixo de acordo com isso. O padrão é definido como 0,02ms ou 50Hz. É possível aumentar para 0,03 ou mais alta para uma meta de 30 fps.
- Considere simplificar os colisão de malha e minimizar a colisão de camadas Matriz para determinar as interações entre objetos do jogo de uma camada específica. tipos
Para informações sobre configurações de física e otimizações em jogos para dispositivos móveis, consulte a E-book sobre como otimizar seus jogos para dispositivos móveis do Unity.
Perfil
Muitas vezes, os desenvolvedores de aplicativos negligenciam ou ignoram a criação de perfil até que o aplicativo atinge um ponto de falha crítico. É uma boa ideia agendar horários tempo de criação de perfil em seu processo e use as seguintes práticas recomendadas:
- Identificar pontos importantes durante o desenvolvimento em que é possível alocar a criação de perfil momento específico, em vez de ajustá-los aleatoriamente.
- Salve os snapshots do perfil para usar com o Analisador de perfil do Unity
- Crie o perfil do seu jogo nos dispositivos de destino para ter uma visão precisa de como o desempenho do jogo na fase atual de desenvolvimento.
- Criar um perfil para diferentes partes do jogo
- Gerar um perfil de como os jogadores jogam. Não crie perfis somente para seu jogo quando ele está em um estado inativo ou em uma tela de pausa.)
- Perfil no modo sustentado depois de o jogo estar em execução por um tempo para ajudar a encontrar problemas de limitação os dispositivos são quentes.
É possível usar as ferramentas de criação de perfil a seguir separadamente ou combinadas.
Unity Profiler é um recurso de desempenho totalmente integrado ferramenta de análise que pode ser executada no seu código no Unity Editor e conecte-se a um dispositivo Android independente que executa builds no modo de desenvolvimento.
Android GPU Inspector com o Android GPU Inspector (AGI), é possível realizar a depuração no nível do frame. O AGI também analisa os serviços do sistema, incluindo GPU, CPU, memória, bateria e GPU contadores.
Para mais detalhes sobre como criar perfis de jogo no Unity, assista ao vídeo Introdução à criação de perfis no Unity ou leia o Guia definitivo sobre criação de perfis em jogos do Unity (em inglês), do Unity.
Gerenciamento de memória
Os processos do Android compartilham a memória disponível no dispositivo de destino. Você deve Uso de memória de perfil quando o dispositivo de teste de destino tem memória livre suficiente do Google Cloud. Realize testes de memória a uma velocidade em um ponto do jogo para comparar sessões e tendências de uso de memória adequadamente.
Ao trabalhar com scripts escritos em C#, tenha cuidado com o uso de strings, comparações de strings e alocações de objetos relacionados a strings (como JSON para as configurações do jogo). Elas geram alocações de memória frequentes e podem contribuir para a fragmentação.
Considere usar o
StringBuilder (link em inglês)
para grandes sequências de manipulação de strings, sobre a concatenação no local de
strings (como "isto" + "é" + "a" + "ruim" + "ideia" versus
chamadas de função StringBuilder.Concat()
).
Para mais informações sobre strings, consulte Strings e texto na documentação do Unity.
Avaliar os recursos de texto TextAsset e JSON em relação aos
ScriptableObject
. ScriptableObjects
lida com o armazenamento de dados entre cenas
de forma eficiente e permitir modificações de tempo entre o editor e a reprodução.
Para uma discussão sobre o uso de alternativas ao padrão, Identificador JSON para otimização para dispositivos móveis (consulte o artigo) A otimização oculta nos jogos de rede em Hutch.
Use o API Memory Advice para determinar o uso da memória no momento da execução. A API expõe um indicador de semáforo para uso de memória alto, normal e baixo. Você inscrever-se no indicador de atualizações ou pesquisá-lo diretamente para o atual o status atual da conta. Ao receber um sinal vermelho, reduza o objeto do jogo no pool ou no cache. Incluir esse contexto na telemetria do jogo durante a transmissão ao vivo operações e análise de métricas de desempenho após o lançamento.
Para saber mais sobre a organização da memória em dispositivos Android e como o Unity funciona com ele, assista Noções básicas sobre o uso da memória do Android (do Google I/O 2018) (em inglês). O vídeo mostra os tipos de problemas de memória e quando a baixa memória assassino entra em vigor.
Coleta de lixo
A coleta de lixo em um ambiente de memória gerenciada limpa a memória não utilizada. que podem ser reciclados para um aplicativo. Seguir práticas recomendadas para coleta de lixo para evitar alocações desnecessárias de recursos de memória.
Por exemplo, crie um pool de objetos do jogo em vez de usar sob demanda
alocações (GameObject.Instantiate
). Para piscinas grandes, considere
alocação em vários frames para reduzir o risco de o jogo ser
que não responde em dispositivos Android básicos.
Considere o snippet de código abaixo para uma corrotina simples que é invocada por no início de um MonoComportamento:
// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
while (enabled) {
yield return new WaitForSeconds(1.0f);
// Some intermittent function check
}
}
// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
while (enabled) {
yield return waitForSecond;
// Some other intermittent function
}
}
Você pode
editar
o arquivo modelo MonoBehaviour para remover o Start()
padrão e
Update()
funções de stub para não deixar vazias acidentalmente
e funções conforme você desenvolve.
Para uma visão geral da ordem de execução dos eventos MonoBehaviour, consulte Ordem de execução das funções de evento na documentação do Unity. Para saber mais sobre gerenciamento de memória, consulte curso Gerenciamento de memória no Unity.
Para dicas de otimização do desempenho de jogos para dispositivos móveis, consulte Otimize o desempenho do seu jogo para dispositivos móveis: dicas dos principais engenheiros do Unity sobre criação de perfil, memória e arquitetura de código (em inglês).
Pool de prefab
Os picos do tempo para a renderização do frame da CPU são quase inteiramente causados pela instanciação do Prefab durante durante as partidas. Considere o pré-aquecimento de pools de objetos para projéteis, e efeitos visuais antes de entrar no jogo para reduzir ou e eliminar os picos de CPU de inicialização. É possível distribuir outras otimizações em vários "frames de inicialização" durante o carregamento e sequências de introdução na cena.
Há muitos recursos de pool de terceiros no recurso do Unity Loja relacionados ao gerenciamento de pools de objetos de jogos. ou criar suas próprias opções. Consulte Introdução ao pool de objetos no Unity Learn.
Entrega de recursos
Há limites para o tamanho do aplicativo na primeira implantados no Google Play. Dependendo do tamanho e da natureza do jogo, pode precisar de alguns ou de todos os recursos do jogo (modelos de personagens, ambientes, elementos da interface do usuário e assim por diante) para que os jogadores tenham a experiência pretendida.
Você pode usar o Play Asset Delivery (link em inglês) (PAD) para gerenciar os recursos exigidos pelo jogo no momento da instalação, ou sob demanda. Os Unity Asset Bundles são integrados ao suporte PAD, e você pode usar a ferramenta para especificar quais elementos serão exibidos.
Addressables
Configurar recursos dinâmicos, como prefabs, texturas e sons no ambiente de execução não é mais uma operação complexa se você se preparar e analisar o sistema de nomenclatura do Addressables. Endereçável separam como organizar o conteúdo e como você cria e carrega seu conteúdo. O sistema do Addressables substitui as pastas Resources e o Asset Pacotes para simplificar a forma como você referencia recursos e os carrega no tempo de execução.
Para ver um exemplo, consulte Projeto de demonstração usando o pacote Addressables no GitHub. Para mais detalhes sobre o desenvolvimento do Addressables, consulte a Addressable Asset System no blog do Unity (em inglês).
Com o layout de ativo Addressable, há vantagens e desvantagens pacotes muito poucos ou muitos recursos em pacotes comuns. Para saber mais sobre gerenciamento de conteúdo com Addressables, consulte Simplifique o gerenciamento de conteúdo com o Addressables.
É possível configurar um
uma demonstração independente e testar os modos de acesso para ter
com o sistema Addressables. Confira também o projeto de código aberto
BuildLayout Explorer para Unity 2019.3 e mais recentes,
e inspecionar o relatório buildlayout.txt
gerado pelo
Addressables.
Os recursos do Chop Chop, um Unity Open Project, foram empacotados usando o Sistema do Addressables para carregamento e descarregamento. Consulte Como empacotar conteúdo com recursos endereçáveis | Devlog de projetos abertos para conferir a estrutura e a configuração da configuração dos Addressables pacotes.
No projeto Chop Chop, a única cena carregada por padrão, "Initialization",
cenário, foi configurado para usar AssetReferences
em vez de links diretos para recursos no
projeto (cenas, prefabs etc.).
O código-fonte da Unity Open Project: Chop Chop (link em inglês) está disponível no GitHub. Embora o projeto não esteja mais em desenvolvimento, a O repositório git e a documentação ainda estão disponíveis.
Plug-ins de terceiros
Se você usa plug-ins de terceiros, como os do Unity Asset Store, analise as pastas e remova os recursos desnecessários Resources. Durante o processo de build, o Unity coleta todos incluídos nas pastas Recursos e os empacota em um único um pacote acessível no momento da execução. Isso pode adicionar sobrecarga ao pacote final, e muitas vezes não é necessário.
Para localizar rapidamente todas as pastas de recursos, procure Recursos nas Projeto do painel de controle. Você pode então selecionar cada um para identificar o que ele contém e se necessários para o jogo.
![](https://developer.android.com/static/images/games/engines/unity/unity-search-resources.png?authuser=9&hl=pt)
Publicar e manter
Quando estiver tudo pronto para lançar seu jogo para dispositivos móveis, decida quem você quer lançar, como fazer testes Alfa e Beta e como monitorar e acompanhar após o lançamento.
Analisar o feedback de uma versão limitada
É possível fazer o lançamento para um público-alvo limitado e segmentado, além de usar a versão Beta em grande escala ou ative o jogo para disponibilidade total em todos os mercados. Com um com lançamento limitado, é possível ajustar o desempenho do aplicativo com base em uma abordagem público ao vivo e coleção de dispositivos.
Por exemplo, é possível usar Android Performance Tuner para Unity e Google Analytics para Unity para receber insights sobre o desempenho do seu aplicativo e as tendências dos jogadores, desde que sua equipe de desenvolvimento pode ajustar e enviar atualizações. Você também pode usar seu dados analíticos para planejar sequências ou jogos relacionados de um gênero semelhante.
Teste Alfa e Beta
Depois de configurar seu perfil de aplicativo no Google Play Console, você pode preparar conteúdo versões de teste Alfa e Beta e distribuí-las a um público limitado para análise de pré-lançamento. De lançando a um público limitado, você pode resolver quaisquer problemas finais com uma grupo de dispositivos e coletar feedback inicial aos quais você pode responder antes de ir em um lançamento global.
Os builds do Unity são distribuídos pelos Android App Bundles. Para mais informações, consulte Manual: envio para o Google Play do Unity, que também descreve as mudanças de arquivos APK para o arquivo AAB .
Monitorar e rastrear
Durante a fase de LiveOps e de distribuição do seu jogo, você pode usar as APIs do Android Android vitals, para ajudar a monitorar redução de problemas de desempenho em dispositivos aos quais você não teve acesso durante desenvolvimento e teste. Para mais detalhes, assista Novidades para jogos no alcance e nos dispositivos e no Android vitals.
Geralmente, equipes de desenvolvimento maiores têm pipelines de telemetria de jogos exclusivos e personalizados que apresentam métricas relacionadas ao desempenho do dispositivo. Lembre-se de aproveitar da Android Performance Tuner (APT) e o plug-in correspondente do Unity para as métricas de acesso por telefone relacionadas a frame rates, fidelidade gráfica, tempo de carregamento e abandono do carregamento. Siga o guia passo a passo na Como integrar o Android Performance Tuner ao seu jogo do Unity.
O ciclo de vida do jogo não para depois do lançamento. Monitorar, manter e responder ao desempenho e ao feedback é fundamental usuários satisfeitos, avaliações positivas e adoção final do jogo em em todos os mercados.