Unity - Armadilhas do Desenvolvimento de Jogos 2D

Existem muitos artigos sobre o Unity para iniciantes, mas não quero me repetir, mas quero compartilhar minha experiência no desenvolvimento do primeiro jogo e, mais especificamente, falar sobre o que eu tropecei. Isso permitirá que todos vocês, queridos desenvolvedores, se protejam no futuro de trabalho não planejado e perda de tempo. Espero que este material seja lido pelos desenvolvedores do Unity para melhorar seu produto.

imagem

Atenção , sob o screenshot do gato 16+ !

Como a maioria de nós é formada por técnicos, colocarei tudo nas prateleiras, na moda e tentarei apresentar o material o mais brevemente possível, de forma concisa e sem água.

Desafio


Eu queria escrever algo de Ano Novo, simples de entender e de gerenciar. Como resultado da discussão com o público-alvo (meu filho), foi decidido que o jogo seria assim:

  • 2D (já que é mais conveniente jogar jogos 2D no telefone)
  • Controle com um dedo (às vezes no máximo dois)
  • Assassino do tempo (apenas uma cutucada para não forçar o cérebro)
  • Sistema de conquista (para tornar pelo menos um pouco interessante continuar)
  • Desenho animado
  • Boa musica
  • Sem internet
  • Android (facilidade de instalação dos arquivos apk de teste)


Tudo resultou na idéia " Satanás Papai Noel atira em veados que interferem em sua bolsa" .

mortal klaus

E então tudo começou ...

1. Bibliotecas Android de terceiros


Problema: passei dois dias encontrando o SDK, JDK, NDK e fazendo o Unity funcionar com eles. Na minha máquina antes do Unity, o sdk do android studio já estava presente, mas não começou com eles, tive que procurar outra coisa, instalar, tentar, pesquisar novamente ... dois dias ...

Sugestão para aprimoramento: seria bom se o sdk necessário das versões mais recentes fosse instalado automaticamente durante a instalação do Unity, e se alguém precisar fazer o downgrade ou o upgrade - deixe que este se configure com canetas.

imagem

2. Gráficos vetoriais


Problema: A unidade pronta para o uso não entende o SVG . Mesmo todos os tipos de estruturas JS pequenas, como o Paper.js, simplesmente funcionam de maneira inteligente com um vetor, mas um elefante como o Unity não.

Solução: instalei um pacote beta que parece ler SVG, mas no final o converte em uma varredura. Unidade aceitável, mas embaraçosa!

3. plataforma 2D


imagem

Problema: como você pode ver na captura de tela, há terra e bola de neve nela. E este também é o Mesh e o Polygon Collider . Ou seja, é uma superfície que interage com objetos e que pode ser alterada no editor. Portanto, na versão atual do Unity, não há ferramentas padrão que possam ser usadas para simular isso.

Solução:
  1. Você pode desenhar uma varredura com alfa (menos - editar esse poço é bastante inconveniente)
  2. Você pode comprar um plug-in que faz isso (menos - gastar dinheiro)
  3. Você pode escrever o plugin você mesmo (menos - demore muito tempo para descobrir, demore muito tempo para escrever)

Eu escolhi uma maneira longa, mas gratuita;) Se alguém precisar desse plug-in - escreva, compartilhe, diga como usá-lo, não me importo :)

Aliás, eu assisti a demo do novo beta do Unity, parece que essa coisa aparecerá fora da caixa! Obrigado por isso, amigos!

Sim, eu adicionaria um painel para criar rapidamente primitivas 2D, círculos lá, quadrados ... caso contrário, eles simplesmente não existem, bem, ou você precisa ir ao lado do ativo e procurar.

4. Rotação e Quaternion


Problema: um sistema muito complexo de posicionamento e rotação 3D, desnecessário em jogos 2D.

Solução: você só precisa entender e aceitá-lo, porque um jogo 2D é um jogo 3D com a coordenada Z = 0. Mas seria bom simplificar esse sistema no modo 2D, camaradas;)

Eu matei muito tempo e quase quebrei meu cérebro, tentando girar o objeto na direção certa para o ângulo certo, em relação a outro objeto, quando acabei de escrever player.a = 45 em outro mecanismo ; Sim, e muitos métodos óbvios na versão atual são privados.

5. Depuração


Problema: para nós, iniciantes, a possibilidade de depuração está disponível apenas na forma de gerar o valor da variável para o console usando o método print () . Pausas de pleno direito são as que pagam. Corrija-me aqui, se estiver enganado, mas não consegui configurar o Visual Studio para depuração de nenhuma maneira, apesar de encontrar um vídeo no qual fica claro que nada precisa ser configurado, ele deve funcionar por si só. Ele concluiu que a depuração está disponível em versões pagas.

Solução: Uso apenas print () ... e entendo que a depuração de um projeto complexo será um fator decisivo na aquisição de uma versão paga do Unity. Os comerciantes da empresa triste respeito :(

Resolvido! Graças ao prompt do Leopotam, instalei um pacote adicional para o estúdio, o botão "Attach to Unity debugger" apareceu.

6. Toque e clique, deslize e mova


Problema: apesar da conveniência do sistema interno de entrada do usuário, a simplicidade do processamento de fitas simples comuns, cliques e furtos não é suficiente. Gostaria de usar um método que retornará as coordenadas de um único clique / toque para diferentes tipos de dispositivos: um toque e uma área de trabalho com um mouse, por exemplo.

Solução: tive que escrever minha camada de classe e agrupar os eventos necessários.

Talvez eu deixe mais um comentário sobre o sistema de gerenciamento. Muito obrigado aos desenvolvedores do Unity pela entrada universal, mas por dispositivos de toque eu também gostaria de controles universais. Por exemplo, deslize para cima - ligue para Pular, visualize a cruz e os botões, como em um joystick, e assim por diante. Você pode comprar isso em pacotes pagos ou, novamente, escrever a si mesmo, gastando tempo com bicicletas.

7. Confusão com coordenadas


Problema: você não pode atribuir as coordenadas de clique ao objeto e vê-lo no lugar certo, e isso é um pouco óbvio.

Solução: Primeiro você precisa ler a documentação, entender e usar vários métodos para mapear coordenadas:

WorldToScreenPoint ()
ScreenToViewportPoint ()
transform.TransformPoint ()
e outros ...

Explicarei isso porque a distância na cena é medida em unidades arbitrárias que não um pixel e, além disso, os objetos têm um sistema de aninhamento, respectivamente, o posicionamento é relativo ao pai.

8. Um conjunto escasso de controles da interface do usuário


Problema: apenas os elementos mais básicos são entregues da caixa e, mesmo assim, você precisa mexer em alguns.

Solução: você pode se contentar com pouco. Por exemplo, gastei muito tempo para fazer a lista dinâmica rolar. Você pode comprar controles legais (menos - gastar dinheiro).

9. Tamanho do arquivo APK grande


Problema: ao criar um projeto vazio, seu tamanho é 21,9 MB (23.061.612 bytes)

Solução: você precisa economizar em tudo. Eu belisquei arquivos mp3, texturas compactadas e tentei não incluir nada supérfluo no projeto. Mas quando pacotes adicionais foram conectados, o tamanho aumentou sem piedade, lutando por cem.

O Google Play pede que os desenvolvedores publiquem aplicativos <100Mb . (22 já devoraram). É claro que existem mecanismos para o carregamento dinâmico e dividido de recursos, mas somos recém-chegados e nosso objetivo é aprender o básico, realizar nossos queridos sonhos e não lutar contra os limites do mercado.

10. Cirílico


Problema: Depois de montar um projeto para a plataforma JS / HTML5 (para testes), verificou-se que simplesmente não havia textos escritos em russo.

Solução: você precisa fazer o download do arquivo de fonte, importá-lo para ativos e, em seguida, especificar essa fonte importada nas configurações de cada texto.

Isso é de alguma forma muito estranho.

11. desempenho físico


Problema: O jogo começa a desacelerar terrivelmente quando existem coletores complexos, ao usar o modo Contínuo para Detecção de Colisão , quando vários Particle System são usados ​​em uma cena, enfim, quando tudo é usado para dar efeito e beleza aos jogos.

Solução: use apenas os coletores primários de Círculo e Retângulo ; a detecção de colisão deve ser discreta ; o número de partículas no sistema de partículas deve ser definido como o mínimo aceitável. Bem e ainda, para não admitir meu erro e não usar colisões dentro do sistema de partículas. O efeito, é claro, é bonito, pois o sangue flui pelos objetos, mas consome muitos recursos.

imagem

Naturalmente, isso é verdade para jogos para celular em 2D. Mas eu gostaria que o Unity desenvolvesse, usasse novos shaders legais para partículas, colisões e tudo mais complexo e bonito.

Conclusão


Havia, é claro, outras armadilhas, mas essas são insignificantes. Havia vantagens inesperadas, como:

  • Prefabs
  • Boa documentação e comunidade
  • Criar automaticamente um colisor de polígono usando o canal alfa de um sprite
  • Facilidade de uso de efeitos sonoros.
  • Animação muito conveniente em quadros principais (com a adição de Anima2D e cinemática reversa)

Mas esta é uma história completamente diferente ...

Quanto ao momento da tarefa, fui bastante inibido pelo ponto 3 (desenvolvimento de um plug-in para modelar a plataforma). Como desenvolvedor experiente, avaliei o problema por mim mesmo e o classifiquei da seguinte forma: 20, 30, 40 (noites / dias de folga porque durante o dia estou ocupado com o trabalho principal), onde 20 é otimista e 40 é pessimista. Se não fosse o ponto 3, eu teria atingido 20 a 30, mas no final passei cerca de dois meses. (não, eu não trabalhava todas as noites, ou seja, chegava aos 40).

Se alguém estiver interessado, direi que precisei desenhar os gráficos, graças ao programa Inkscape . Escolhi músicas exclusivamente com uma licença para uso gratuito.

Eu tive que passar alguns dias publicando no Google Play .

Mais dois dias foram gastos na integração da publicidade (você provavelmente não a verá, eu realmente queria experimentá-la, embora o brinquedo não fosse considerado comercial)

Sim, muito poderia ter sido melhorado, mas eu queria divertir meus amigos antes do feriado de Ano Novo.

Não me interpretem mal, este não é um post de relações públicas. Acima de tudo, quero que aqueles que fazem o mecanismo do Unity prestem atenção a essas deficiências e, é claro, as eliminem (bem, isso é ideal). E também quero ajudar meus irmãos espirituais a não seguirem o mesmo caminho que eu.

E se eu estiver enganado em algo, não julgue rigorosamente, compartilhe suas dicas nos comentários!

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


All Articles