Caso esta seja a primeira vez que você acessa nossa série, sinta-se especialmente convidado a juntar-se a nós em uma divertida trilha de aprendizagem. Por meio do desenvolvimento de projetos práticos de codificação de jogos, conheceremos mais sobre os processos de elaboração de games utilizando a ferramenta Unity como apoio, entenderemos melhor suas características de uso e aprenderemos a aplicá-la de forma satisfatória para criar jogos de diversos gêneros.
No tópico anterior de nossa série, realizamos ajustes relacionados à colisões entre pílulas no labirinto e implementamos uma paciente adicional à sequência de desafios. As ações que desenvolvemos até o momento nos prepararam para que, hoje, consigamos aplicar os últimos ajustes a nosso projeto, finalizando a construção dessa aventura virtual.
A partir do primeiro tópico, abordamos os mais diferentes conteúdos relacionados ao processo de programação de jogos utilizando a ferramenta Unity, desde a instalação e configuração do software em nossos computadores até as etapas que envolvem, de fato, a programação e a criação dos desafios que compõem um game, tais como o posicionamento dos objetos que compõem cenas e fases e a codificação de scripts controladores de regras e de comportamentos.
No momento, estamos desenvolvendo Consultório do Dr. Tratanildo, um puzzle tridimensional ambientado em um curioso consultório médico, cujo desafio proposto ao gamer envolve a coleta de diferentes pílulas de saúde coloridas espalhadas pelo ambiente e sua utilização para o tratamento de pacientes acometidos por diversas doenças virtuais. Anteriormente, concluímos a construção de outros dois games: Forest Ping Pong, inspirado no clássico dos arcades Pong (Atari, 1972); e Motorista da Pesada, platformer inspirado no game japonês City Connection (Jaleco, 1985).
Vale muito a pena acompanhar as etapas de elaboração dos três jogos, a partir dos textos destacados no índice da primeira entrada da série. É possível, inclusive, experimentar os dois primeiros games diretamente de seu navegador, por meio de links nos últimos textos de seus projetos.
Se você gostou da ideia de tirar do papel games de diferentes estilos gráficos e de gameplay, não perca mais tempo e junte-se a nós em uma jornada repleta de novos conhecimentos e de muita diversão!
Ajustes finos para as pílulas de saúde
Conforme fomos elaborando labirintos mais complexos para as fases avançadas de nosso game, nos deparamos, em alguns momentos, com comportamentos indesejados observáveis no labirinto. Colisões indevidas entre pílulas e travamentos de movimentação em labirintos estreitos são exemplos de problemas que enfrentamos e, aos poucos, fomos solucionando, por meio das intervenções realizadas em nossos últimos encontros.
Uma das características marcantes do comportamento das pílulas em nosso labirinto é a rolagem contínua dos medicamentos pelo cenário, ocasionado por meio das inclinações que aplicamos ao ambiente, durante o manejo do aparelho acoplado ao leito hospitalar. Essa rolagem ocorre pois os colisores que implementamos para as pílulas, dentro do labirinto, apresentam formato esférico.
Vamos realizar um pequeno ajuste nas dimensões dos colisores esféricos das pílulas, para reduzir a probabilidade de que os medicamentos “encalhem” em passagens mais estreitas do labirinto. Para realizarmos este ajuste, abriremos o projeto para edição: no Unity Hub, clique duas vezes sobre o item referente ao projeto Consultório do Dr. Tratanildo. Na interface inicial do Unity, na aba Project, abra a pasta Assets e, em seguida, Scenes. Clique duas vezes sobre o ícone da cena ConsultorioScene para iniciarmos as intervenções.
Na aba Project, abra sequencialmente as pastas listadas a seguir:
- Assets;
- Multimedia;
- 3D;
- NossasPilulas;
- PilulasLabirinto.
Falha nossa
No encontro em que realizamos ajustes para melhorar a movimentação dos agentes de doenças no labirinto, durante a elaboração do mecanismo para bloqueio da movimentação dos monstrinhos pelo cenário, acrescentamos elementos do tipo Rigidbody à determinados elementos da estrutura do labirinto, como as paredes e o cubo de referência para construção dos obstáculos internos.
Da forma como implementamos a detecção dos limites do cenário pelos agentes de doenças (por meio do script DetectorAuxiliarColisoes), a análise é realizada apenas por meio da interação entre o elemento invisível DetectorColisoes (o “para-choque” dos monstrinhos) e o colisor das paredes, dos obstáculos, das pílulas e dos demais monstrinhos.
O uso de Rigidbodies atrelados a cada elemento limitador do labirinto visava reforçar esses limites, porém, além de desnecessário para a correta atuação de DetectorAuxiliarColisoes, durante as inclinações aplicadas sobre o labirinto, sua presença poderia implicar em impactos involuntários causados sobre pílulas posicionadas ao lado das paredes ou dos obstáculos, ocasionando movimentos inesperados.
Dessa forma, assumindo essa “falha nossa”, vamos desfazer essa concessão aos objetos limitadores do ambiente. Na aba Hierarchy, selecione o objeto Labirinto e ative-o, por meio da caixa de seleção ao lado de seu nome, presente na aba Inspector. Em seguida, expanda a listagem de objetos subordinados a ele e, em seguida, selecione simultaneamente LabParede1, LabParede2, LabParede3, LabParede4 e CubeRef (este, subordinado a Obstaculos).
Via aba Inspector, clique com o botão direito sobre o nome de seus componentes Rigidbody e, em seguida, selecione a opção Remove Component.
Por fim, volte a desativar Labirinto, selecionando-o e desativando a caixa de seleção ao lado de seu nome, presente na aba Inspector.
Últimos pacientes
É chegada a hora de configurarmos os últimos dois pacientes de Tratanildo Doencita, totalizando oito desafios sequenciais a serem enfrentados pelos jogadores para a conclusão da aventura. Como é de se esperar, os derradeiros desafios apresentam um grau de dificuldade elevado, em comparação aos anteriores, seja por meio do uso de diferentes agentes de doenças, seja pela geometria do labirinto configurado.
O primeiro paciente apresenta um quadro bem curioso: após se entupir de balas de hortelã, sua coloração mudou e, desesperado, veio buscar auxílio de Tratanildo Doencita.
O tratamento de sua doença envolverá o uso majoritário de pílulas verdes, cujo caminho até o interior do corpo do paciente apresenta ser bem tortuoso.
Já o último desafio de Tratanildo Doencita é praticamente uma surpresa: um robô humanoide procura o famoso médico virtual, pedindo socorro para a normalização de seu funcionamento.
Como desafio final, o jogador deverá encarar monstrinhos de todas as cores disponíveis, inclusive com o retorno triunfal dos agentes de doenças vermelhos, utilizados até então apenas no primeiro desafio do game.
Para configurarmos os novos pacientes no projeto, na aba Hierarchy, clique sobre o objeto ControladorFase. Via aba Inspector, vamos realizar as seguintes intervenções em atributos de seu componente ControllerFase:
- Tipo Paciente: amplie o tamanho do vetor para 8.
- Element 6: conceda o valor 3 (corresponde ao item skin_orc, presente em Estilos Visuais Pacientes);
- Element 7: conceda o valor 4 (corresponde ao item skin_robot, presente em Estilos Visuais Pacientes).
- Fala Paciente: amplie o tamanho do vetor para 8.
- Element 6: conceda o seguinte texto, sem as aspas:
“Doutor, acho que exagerei um pouco nas balas de hortelã, e agora estou verde, me sentindo mal! Me ajude, estou com medo!!!” - Element 7: conceda o seguinte texto, sem as aspas:
“BEEP-BEEP, TRATANILDO! ROBÔ-GPT PRECISA DE AJUSTES, URGENTE! BEEP-BEEP!” - Fala Doutor: amplie o tamanho do vetor para 8.
- Element 6: conceda o seguinte texto, sem as aspas:
“Que gulodice, hein! Vamos administrar algumas pílulas de saúde para que não haja intercorrências mais graves.” - Element 7: conceda o seguinte texto, sem as aspas:
“Está aí um caso inédito de verdade, até mesmo para um renomado médico, como eu. Será que conseguiremos tratá-lo?” - Fala Final: amplie o tamanho do vetor para 8.
- Element 6: conceda o seguinte texto, sem as aspas:
“Ainda estou verde, mas me sinto melhor. Vou aproveitar essa cor para ganhar um dinheiro, fazendo figuração em festas infantis!” - Element 7: conceda o seguinte texto, sem as aspas:
“BEEP-BEEP! TRATANILDO É O MELHOR ANTIVÍRUS DO UNIVERSO VIRTUAL! OBRIGADO!!!”
- Tempo Max Tratamento: amplie o tamanho do vetor para 8.
- Element 6: conceda o valor 140;
- Element 7: conceda o valor 200.
- Posicao Monstros Azuis: amplie o tamanho do vetor para 6.
- Element 4: X = -2.75, Y = 4.5, Z = 6;
- Element 5: X = -8.5, Y = 8, Z = 7.
- Posicao Monstros Verdes: amplie o tamanho do vetor para 8.
- Element 4: X = 4, Y = -4.5, Z = 6;
- Element 5: X = 4, Y = 4.5, Z = 6;
- Element 6: X = 0, Y = 1.5, Z = 6;
- Element 7: X = -8.5, Y = -8, Z = 7.
- Posicao Monstros Roxos: amplie o tamanho do vetor para 7.
- Element 6: X = -5.5, Y = -8, Z = 7.
- Posicao Monstros Amarelos: amplie o tamanho do vetor para 5.
- Element 4: X = 0, Y = 8, Z = 7.
- Posicao Monstros Vermelhos: amplie o tamanho do vetor para 5.
- Element 3: X = 0, Y = -8, Z = 7;
- Element 4: X = -5.5, Y = 8, Z = 7.
- Posicao Obstaculos: amplie o tamanho do vetor para 64 (37 preexistentes + 18 para o labirinto do primeiro novo paciente + 9 para o labirinto do segundo novo paciente).
- Element 37: X = -1, Y = 6, Z = 6;
- Element 38: X = 0.5, Y = -6, Z = 6;
- Element 39: X = -4.5, Y = -5, Z = 6;
- Element 40: X = -4.5, Y = 4, Z = 6;
- Element 41: X = -5.5, Y = -1.5, Z = 6;
- Element 42: X = -1.5, Y = 2, Z = 6;
- Element 43: X = 1.5, Y = -2, Z = 6;
- Element 44: X = 2.5, Y = 4, Z = 6;
- Element 45: X = 4, Y = 6, Z = 6;
- Element 46: X = 5.5, Y = 0, Z = 6;
- Element 47: X = -6, Y = -5, Z = 6;
- Element 48: X = 9, Y = -2, Z = 6;
- Element 49: X = 0, Y = 8, Z = 6;
- Element 50: X = 0, Y = -7, Z = 6;
- Element 51: X = 3.75, Y = -9, Z = 6;
- Element 52: X = -9, Y = -9, Z = 6;
- Element 53: X = -9, Y = 0, Z = 6;
- Element 54: X = -9, Y = 9, Z = 6;
- Element 55: X = -1.5, Y = 0, Z = 7;
- Element 56: X = 1, Y = 3, Z = 7;
- Element 57: X = 1, Y = -3, Z = 7;
- Element 58: X = 0, Y = 6, Z = 7;
- Element 59: X = 0, Y = -6, Z = 7;
- Element 60: X = -7, Y = 6.5, Z = 7;
- Element 61: X = -7, Y = -6.5, Z = 7;
- Element 62: X = 6.5, Y = 6.5, Z = 7;
- Element 63: X = 6.5, Y = -6.5, Z = 7.
- Dimensao Obstaculos: amplie o tamanho do vetor para 64 (37 preexistentes + 18 para o labirinto do primeiro novo paciente + 9 para o labirinto do segundo novo paciente).
- Element 37: X = 6, Y = 1, Z = 6;
- Element 38: X = 9, Y = 1, Z = 6;
- Element 39: X = 1, Y = 5, Z = 6;
- Element 40: X = 1, Y = 3, Z = 6;
- Element 41: X = 1, Y = 3, Z = 6;
- Element 42: X = 0.5, Y = 3, Z = 6;
- Element 43: X = 1, Y = 2, Z = 6;
- Element 44: X = 1, Y = 3, Z = 6;
- Element 45: X = 2, Y = 1, Z = 6;
- Element 46: X = 1, Y = 13, Z = 6;
- Element 47: X = 2, Y = 1, Z = 6;
- Element 48: X = 1, Y = 6, Z = 6;
- Element 49: X = 1, Y = 3, Z = 6;
- Element 50: X = 1, Y = 1, Z = 6;
- Element 51: X = 1, Y = 1, Z = 6;
- Element 52: X = 1, Y = 1, Z = 6;
- Element 53: X = 1, Y = 1, Z = 6;
- Element 54: X = 1, Y = 1, Z = 6;
- Element 55: X = 16, Y = 1, Z = 7;
- Element 56: X = 10, Y = 1, Z = 7;
- Element 57: X = 10, Y = 1, Z = 7;
- Element 58: X = 8, Y = 1, Z = 7;
- Element 59: X = 8, Y = 1, Z = 7;
- Element 60: X = 1, Y = 6, Z = 7;
- Element 61: X = 1, Y = 6, Z = 7;
- Element 62: X = 1, Y = 6, Z = 7;
- Element 63: X = 1, Y = 6, Z = 7.
Esses são os parâmetros finais de nosso projeto. Para a realização de testes, antes de ir à aba Game e clicar sobre o ícone do botão Play, recomendo alterar, temporariamente, o valor da variável faseCorrente, por meio de intervenções dentro da função Start do script ControllerFase.
Para testar diretamente a penúltima fase do jogo:
faseCorrente = 5;
Para testar diretamente a última fase do jogo:
faseCorrente = 6;
Salve o script e teste o jogo, para verificar se os novos valores dos conjuntos de parâmetros Posicao Obstaculos e Dimensao Obstaculos foram concedidos de forma adequada.
Ao término do processo de testes, não se esqueça de retornar a variável faseCorrente para o seu valor original (-1) e salvar o script.
Gerando um executável
Após realizarmos inúmeros ajustes em nosso projeto, é chegada a hora de gerarmos o executável de nosso terceiro game, para podermos experimentar e aproveitar, de fato, a aventura digital completa de Consultório do Dr. Tratanildo.
Primeiramente, caso ainda esteja realizando simulações do game, interrompa a execução do jogo, clicando novamente no ícone do botão Play e retornando à aba Scene. Em seguida, salve as alterações realizadas na cena (menu File, opção Save) e no projeto (menu File, opção Save Project). Na sequência, também no menu File, devemos escolher a opção Build Settings, como a imagem a seguir mostra.
Na janela Build Settings, certifique-se de que a cena principal do projeto está na listagem de cenas a se incluir (com suas respectivas caixas de seleção marcadas); caso não esteja, clique sobre o botão Add Open Scenes. Em seguida, selecione a opção PC, Mac & Linux Standalone e, por fim, clique no botão Build.
Assim como fizemos anteriormente para criar o executável dos projetos anteriores, crie uma pasta em seu computador para armazenar os arquivos do jogo; por exemplo, “Meu jogo 03 - Consultório do Dr. Tratanildo”. Selecione-a e clique no botão Selecionar pasta.
Após aguardar o processo de compilação, que costuma demorar alguns minutos, se tudo ocorrer de forma satisfatória, a pasta em que seu jogo foi salvo será aberta. Basta clicar duas vezes sobre o arquivo “Dr. Tratanildo.exe” para executar seu mais novo game.
Parabéns! Você acaba de criar seu terceiro jogo!!!
Modelo para referência
Estão disponíveis no repositório GitHub do GameBlast os arquivos de uma versão já pronta (o “gabarito”) do projeto que desenvolvemos. Se quiser, baixe-os para comparar com o que você codificou em sua máquina.
Os códigos disponíveis no repositório refletem o estado do projeto após as edições realizadas no encontro de hoje, com todas as melhorias acumuladas durante o desenvolvimento, em comparação ao projeto originalmente disponibilizado.
Conclusão e próximos passos
Finalmente, concluímos a construção de nosso terceiro projeto. Durante os encontros, pudemos experimentar diferentes conceitos envolvendo aspectos importantes da criação de jogos tridimensionais, tais como a implantação de recursos de movimentação em ambiente 3D, câmeras e interações de física.
Caso esteja lendo este texto no computador, se quiser, pode testar o jogo diretamente de seu navegador para comparar o game com o que você desenvolveu.
Em um projeto de grande complexidade, como o que finalizamos hoje, é natural que muitas melhorias possam ser implementadas posteriormente, a partir de testes e de validações realizadas durante, e após, as etapas de elaboração do jogo. Por exemplo, aspectos envolvendo a movimentação do personagem podem ser melhorados e novas abordagens para evitar colisões indesejadas dentro do labirinto podem ser adotadas.
Mesmo com a possibilidade de desenvolvimento de melhorias em aberto, é importante comemorar a conclusão do projeto: parabéns por ter alcançado tal feito e, sobretudo, pelos novos conhecimentos adquiridos pelo caminho!
Embora este projeto tenha sido finalizado, nossa série continua, pois temos diversos aspectos técnicos e operacionais a discutir, aplicáveis a nossos projetos pessoais, além dos projetos de exemplo desenvolvidos aqui.
Agora, conte-nos como foi esta jornada para você até o momento: o espaço dos comentários aqui no GameBlast está aberto. Aguardamos ansiosamente para ler o seu relato!
Nos encontraremos novamente no dia 11 de outubro. Até mais! Fique ligado sempre nas novidades do GameBlast!
Revisão: Ives Boitano























