DevOps com aplicativos do Unity

Desenvolver aplicativos para plataformas modernas envolve muito mais atividades do que apenas escrever código. Essas atividades, conhecidas como DevOps (desenvolvimento + operações), abrangem o ciclo de vida completo do aplicativo e incluem trabalhos de planejamento e acompanhando, elaboração e implementação de código, gerenciamento de um repositório de código-fonte, execução de builds, gerenciamento de integrações e implantações contínuas, testes (incluindo testes de unidade e testes de IU), execução de várias formas de diagnóstico em ambientes de desenvolvimento e produção e monitoramento de desempenho do aplicativo e dos comportamentos do usuário em tempo real por meio de telemetria e análise.

O Visual Studio, com o Azure DevOps Services e o Team Foundation Server, oferece uma variedade de funcionalidades de DevOps. Muitos são aplicáveis aos projetos de plataforma cruzada, incluindo jogos e aplicativos gráficos de imersão criados com o Unity, especialmente ao usar C# como linguagem de script. No entanto, como o Unity tem seus próprios ambiente de desenvolvimento e mecanismo de runtime, uma série de recursos de DevOps não se aplicam como se aplicariam a outros tipos de projetos criados no Visual Studio.

As tabelas a seguir identificam como os recursos de DevOps no Visual Studio aplicam-se ou não se aplicam ao trabalhar com o Unity. Consulte a documentação vinculada para obter detalhes sobre os recursos em si.

Ferramentas agile

Link de referência: About Agile tools and Agile project management (Sobre as ferramentas Agile e o gerenciamento de projetos Agile) (usando o Azure Boards ou o TFS, incluindo o Team Explorer Everywhere)

Comentário Geral: todos os recursos de planejamento e acompanhamento são independentes do tipo de projeto e de linguagens de codificação.

Recurso Tem suporte com o Unity Comentários Adicionais
Gerenciar listas de pendências e sprints Sim
Acompanhamento de trabalho Sim
Colaboração da sala da equipe Sim
Quadros kanban Sim
Relatar e visualizar o progresso Sim

Modelagem

Link de referência: Analisar e modelar a arquitetura

Comentário geral: embora esses recursos de design sejam independentes da linguagem de codificação ou funcionem com linguagens .NET como C#, eles operam em um paradigma de aplicativo tradicional com hierarquias de objeto e relações de classe. Projetar um jogo no Unity envolve um paradigma totalmente diferente, ou seja, as relações de objetos gráficos, sons, sombreadores, scripts e assim por diante. Por esse motivo, as ferramentas do diagrama de modelagem do Visual Studio não são particularmente relevantes para a totalidade de um projeto do Unity. Eles poderiam ser usados para gerenciar relações em scripts C#, mas essa é apenas uma parte do todo.

Recurso Tem suporte com o Unity Comentários Adicionais
Diagramas de sequência Não
Grafos de dependência Não
Hierarquia de chamadas Não
Designer de Classe Não
Gerenciador de arquitetura Não
Diagramas UML (caso de uso, atividade, classe, componente, sequência e DSL) Não
Diagramas de camada Não
Validação da camada Não

Código

Recurso Tem suporte com o Unity Comentários Adicionais
Usar o TFVC (Controle de Versão do Team Foundation) ou o Azure Repos Sim Projetos do Unity são simplesmente uma coleção de arquivos que podem ser colocados em sistemas de controle de versão como qualquer outro projeto, mas há algumas considerações especiais descritas após esta tabela.
Introdução ao GIT no Azure Repos Sim Consulte as observações após a tabela.
Melhorar a qualidade do código Sim
Localizar alterações de código e outros históricos Sim
Usar mapas de códigos para depurar aplicativos Sim

Considerações especiais para controle de versão com o Unity:

  1. O Unity acompanha metadados sobre ativos de jogos em uma única biblioteca opaca que está oculta por padrão. Para manter arquivos e metadados em sincronia, é necessário tornar os metadados visíveis e armazená-lo em partes mais gerenciáveis. Para obter detalhes, consulte Uso de sistemas de controle de versão externo com o Unity (documentação do Unity).

  2. Nem todos os arquivos e pastas em um projeto do Unity são apropriados para controle do código-fonte, como também é descrito no link acima. As pastas Ativos e ProjectSettings devem ser adicionadas, mas as pastas Biblioteca e Temp, não. Para obter uma lista adicional de arquivos gerados não entrariam no controle do código-fonte, consulte a discussão Como usar Git para controle do código-fonte Unity3D? em StackOverflow. Muitos desenvolvedores têm publicaram sobre assunto independentemente em seus blogs.

  3. Ativos binários em um projeto do Unity, como texturas ou arquivos de áudio, podem ocupar uma grande quantidade de armazenamento. Vários sistemas de controle do código-fonte, como Git, armazenam uma cópia única de um arquivo para cada alteração feita, mesmo que a alteração afete apenas uma pequena parte do arquivo. Isso pode fazer o repositório Git ficar inflado. Para resolver isso, os desenvolvedores do Unity geralmente optam por adicionar somente ativos finais ao repositório e usar uma maneira diferente de manter um histórico de trabalho de seus ativos, como OneDrive, DropBox ou git-annex. Essa abordagem funciona porque esses ativos geralmente não precisam ter controle de versão ao longo das alterações do código-fonte. Os desenvolvedores normalmente também definem o Modo de Serialização de Ativo como Forçar Texto no editor do projeto para armazenar arquivos de cena no texto e não no formato binário, o que permite mesclagens no controle do código-fonte. Para obter detalhes, consulte Configurações do Editor (documentação do Unity).

Build

Link de referência: Azure Pipelines

Recurso Tem suporte com o Unity Comentários Adicionais
TFS (Team Foundation Server) local Possível Projetos do Unity são criados por meio do ambiente do Unity e não por meio do sistema de build do Visual Studio (compilar dentro de Ferramentas do Visual Studio para Unity compilará os scripts, mas não produzirá um executável). É possível compilar projetos do Unity da linha de comando (documentação do Unity), de modo que seja possível configurar um processo MSBuild em um servidor TFS para executar os comandos do Unity apropriados, desde que o Unity em si esteja instalado no computador.

O Unity também oferece o Build de Nuvem Unity, que monitora um repositório Git ou SVN e executa compilações periódicas. No momento, ele não funciona com o TFVC nem o Azure DevOps Services.
Servidor de build local vinculado ao Azure DevOps Services Possível Dadas as mesmas condições acima, ainda é possível direcionar builds disparados por meio do Azure DevOps Services para uso em um computador com TFS local. Consulte Build and release agents (Agentes de build e de versão) para obter instruções.
Serviço de controlador hospedado do Azure DevOps Services Não Atualmente, não há suporte para compilações do Unity.
Compilar definições com pré e pós-scripts Sim Uma definição de build personalizada que usa a linha de comando do Unity para executar um build também pode ser configurada para scripts de pré e pós-build.
Integração contínua incluindo check-ins restritos Sim Check-ins restritos somente para TFVC, uma vez que Git funciona em um modelo de solicitação pull, em vez de check-ins.

Teste

Recurso Tem suporte com o Unity Comentários Adicionais
Planejando testes, criando casos de teste e organizando conjuntos de testes Sim
Teste manual Sim
Gerenciador de Teste (testes de gravação e reprodução) Somente dispositivos Windows e emuladores Android
Cobertura de código n/a Não se aplica, uma vez que o teste de unidade acontece dentro do Unity e não no Visual Studio, consulte abaixo.
Realizar teste de unidade do seu código No Unity, mas não no Visual Studio O Unity fornece a própria estrutura de teste de unidade como parte das Ferramentas de Teste do Unity (Unity Asset Store). Resultados de teste de unidade são relatados dentro do Unity e não aparecerão no Visual Studio.
Usar a automação da interface do usuário para testar o código Não Os testes de IU codificados dependem de controles legíveis na interface do usuário do aplicativo. Os aplicativos Unity são gráficos por natureza e, assim, o conteúdo não é legível para ferramentas de teste de IU codificado.

Melhorar a qualidade do código

Link de referência: Melhorar a qualidade do código

Recurso Tem suporte com o Unity Comentários Adicionais
Analisar a qualidade do código gerenciado Sim Pode analisar o código de script C# no Visual Studio.
Localizar código duplicado usando detecção de clone de código Sim Pode analisar o código de script C# no Visual Studio.
Medir complexidade e facilidade de manutenção do código gerenciado Sim Pode analisar o código de script C# no Visual Studio.
Ferramentas de desempenho Não Use o Unity Profiler (site do Unity).
Analisar problemas de memória .NET Framework Não Ferramentas do Visual Studio não têm ganchos na estrutura Mono (como usado pelo Unity) para a criação de perfil. Use o Unity Profiler (documentação do Unity).

Gerenciamento de liberações

Link de referência: Build e versão no Azure Pipelines e no TFS

Recurso Tem suporte com o Unity Comentários Adicionais
Gerenciar processos de versão Sim
Implantação para servidores para carregamento lateral por meio de scripts Sim
Carregar para a loja de aplicativos Parcial Estão disponíveis extensões que podem automatizar esse processo para algumas lojas de aplicativos. Consulte Extensões para o Azure DevOps Services; por exemplo, a extensão para Google Play.

Monitorar com HockeyApp

Link de referência: Monitorar com HockeyApp

Recurso Tem suporte com o Unity Comentários Adicionais
Análise de falhas, telemetria e distribuição beta Sim HockeyApp é útil principalmente para tratar a distribuição beta e obter relatórios de falha.

Para telemetria de scripts do C#, é possível usar qualquer estrutura de análise, desde que ela seja executada na versão do .NET que é usada pelo Unity. No entanto, isso permite análise somente dentro de scripts de jogos e não mais profundamente dentro do mecanismo do Unity. No momento, não há nenhum plug-in do Application Insights, mas plug-ins estão disponíveis para outras soluções de análise, como Unity Analytics e Google Analytics. Serviços como Unity Analytics que entendem a natureza de um projeto Unity obviamente fornecerão análise muito mais significativa do que estruturas genéricas.