Se esta for a primeira vez que você lê conteúdos de nossa série, considere-se especialmente convidado a conhecer mais sobre esta jornada de aprendizados práticos, mergulhando de cabeça no mundo do desenvolvimento de jogos digitais.
Por meio da elaboração de diferentes projetos, aprendemos a cada encontro sobre como ferramentas de desenvolvimento de jogos, como a Unity, podem nos auxiliar a tirar do papel games dos mais variados estilos gráficos e de gameplay.
A partir do primeiro tópico da série, abordamos desde a instalação e a configuração da ferramenta em nossos computadores, até tópicos envolvendo os mais variados métodos, técnicas e procedimentos utilizados por estúdios de desenvolvimento no mundo todo para a criação de jogos 2D e 3D. Colocando a mão na massa, encaramos desafios que envolvem a criação de fases, de regras e de metas para um jogo; a codificação de scripts controladores dos elementos em cenários; a elaboração de menus e de interfaces de interação entre o jogador e os desafios virtuais; dentre outros.
Até o momento, já produzimos dois jogos durante nossa jornada, de nomes Motorista da Pesada e Forest Ping Pong. São dois games 2D, cujos aspectos de gameplay remetem a clássicos dos arcades e dos videogames, como Pong (Atari, 1972) e City Connection (Jaleco, 1985).
O projeto em que estamos trabalhando atualmente chama-se Consultório do Dr. Tratanildo. Trata-se de um jogo ambientado em um consultório médico tridimensional, cujo gameplay mescla referências a jogos dos anos 1980 e 1990, como Dr. Mario (Nintendo, 1990), Pac-Man (Namco, 1980) e Tama (Time Warner Interactive, 1994).
Muitos dos conceitos abordados na concepção de um jogo acabam sendo válidos para os demais, por isso, recomendo fortemente que acompanhe, a partir do índice disponibilizado no primeiro texto da série, os passos realizados para a construção dos três games. Também é possível experimentar os dois primeiros jogos completos, diretamente de seu navegador, acessando os últimos textos relacionados a eles.
Se você tem a vontade de tirar do papel os games que sempre sonhou em tornar realidade, a hora é agora: prepare as malas e venha conosco em uma estrada repleta de novos conhecimentos e de muita diversão!
Em queda livre
Em circunstâncias normais, nosso jogo funciona de forma bem adequada, permitindo ao jogador coletar as pílulas pelo cenário e utilizá-las para os tratamentos dos pacientes. Porém, por termos dado liberdade ao jogador para que possa investigar todos os cantos do consultório de Tratanildo Doencita, é possível perceber que existem bugs relacionados ao processo de colisão entre o médico e os limites do cenário que, no pior dos casos, podem fazer com que nosso querido protagonista atravesse paredes e sofra quedas impressionantes.
Existem diferentes abordagens para resolver problemas desse tipo, sendo que nem sempre a mais adequada a um cenário é aplicável a todos os casos. Em nosso projeto, atuaremos em três frentes:
- Correção do formato e das dimensões de Colliders dos objetos;
- Restrições de movimentação do personagem principal no eixo Y; e
- Modificações em parâmetros do Unity, relacionados à detecção de colisões.
Essas alterações visam tanto impedir que o médico acabe por atravessar as paredes e os objetos acidentalmente, quanto evitar que ele sofra uma “queda livre”, caso uma situação como esta venha a ocorrer inesperadamente.
Vamos iniciar as intervenções necessárias, abrindo 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.
Inicialmente, vamos realizar correções envolvendo aspectos de elementos estáticos do cenário, como paredes, janelas e biombos. Na aba Hierarchy, selecione o seguinte conjunto de objetos do cenário fixo, subordinados ao GameObject Ambientacao:
- Parede_1;
- Parede_2;
- Parede_3;
- Parede_4;
- Janela_1;
- Janela_2;
- Porta_1.
Em seguida, na aba Inspector, localize o componente de tipo Box Collider atrelado aos objetos. Modifique o valor do parâmetro Size Z para 0.02, conforme ilustrado a seguir. Caso queira enxergar os limites dos colisores sendo alterados, clique sobre o botão da opção Edit Collider.
Em seguida, selecione o seguinte conjunto de objetos do cenário fixo, também subordinados ao GameObject Ambientacao:
- Pilastra_1;
- Pilastra_2;
- Pilastra_3;
- Pilastra_4.
Para esses objetos, será necessário modificar tanto o valor do parâmetro Size Z de seu componente Box Collider (novo valor = 0.02) quanto o do parâmetro Size X (novo valor = 0.05).
- Center X = 0.1, Y = 1.75, Z = 0;
- Size X = 3.1, Y = 3.25, Z = 0.5.
O chão, embora também seja um objeto de contato constante com o médico, não sofrerá intervenções, pois realizaremos ajustes ao GameObject de Tratanildo que impedirão em definitivo seu deslocamento no eixo Y, aproveitando o fato de termos desenhado um consultório sem escadas ou desníveis. É uma abordagem válida para nossa situação, mas que pode não ser aplicável em jogos em que o personagem principal pule, suba escadas ou rampas.
Ajustando o doutor
Após reforçarmos os colisores dos objetos cenográficos, vamos ajustar parâmetros relacionados ao dono do consultório. Na aba Hierarchy, selecione o objeto DoutorCenario, subordinado a Doutores, dentro do grupo de GameObjects Personagens.
Para que possamos enxergá-lo adequadamente durante as intervenções, na aba Inspector, clique sobre a caixa de seleção em destaque a seguir para deixá-lo ativo no cenário.
A primeira intervenção será para viabilizar a já citada “trava” no posicionamento em eixo vertical do GameObject. Na aba Inspector, localize o componente de tipo Rigidbody e, em seguida, no grupo de atributos Constraints, deixe selecionada a opção Freeze Position Y. Além disso, modifique o valor do parâmetro Collision Detection para Continuous, conforme ilustra a imagem a seguir.
O valor originalmente concedido (Discrete) é mais adequado a objetos estáticos, como paredes e outros elementos do cenário, pois demanda menos processamento do jogo durante as rotinas de cálculos físicos.
Ainda com DoutorCenario em evidência, vamos modificar o tipo de colisor atrelado ao objeto no momento. Como implementamos métodos de controle do personagem pelo cenário que permitem ao jogador movimentá-lo e rotacioná-lo livremente, em algumas situações específicas as arestas de seu Box Collider podem vir a colidir com os demais elementos do cenário. Para evitar esse problema, vamos utilizar um colisor em formato cilíndrico, cobrindo o perímetro de giro do personagem.
Na aba Inspector, localize o componente de tipo Box Collider, clique com o botão direito sobre seu título e selecione a opção Remove Component.
Em seguida, por meio do botão Add Component, adicione um componente de tipo Capsule Collider. Conceda os seguintes valores a seu conjunto de atributos:
- Center X = 0, Y = 0.0375, Z = 0.003;
- Radius = 0.025;
- Height = 0.075.
A cartada final
Dependendo das regiões do cenário em que você realizou o teste de colisão entre o personagem principal e os elementos estáticos do cenário, já é possível perceber uma melhora significativa no bloqueio, baseado nas intervenções que realizamos até o momento. Mesmo assim, persistem alguns “pontos cegos” no consultório, em que, dependendo do ângulo de câmera adotado e da persistência do jogador em tentar “furar os bloqueios”, ainda é possível transpassar os objetos, como podemos notar pela imagem ilustrativa a seguir.
Interrompa a simulação, clicando novamente sobre o ícone do botão Play e retornando à aba Scene. Em seguida, clique sobre o menu Edit e selecione a opção Project Settings. Na coluna à esquerda, selecione a opção Physics e, em seguida, altere o valor do parâmetro Default Max Depenetration Velocity para 100.
Esse parâmetro determina um valor máximo para a velocidade de retorno aplicada automaticamente a objetos que venham a tentar penetrar Colliders de outros objetos. Ajustando este valor para cima, equilibraremos a balança de forças entre um doutor que insiste em querer romper as barreiras de seu consultório e os elementos físicos do cenário.
Realize novos testes e experimente novamente tentar avançar sobre os elementos cenográficos de nosso consultório, utilizando diferentes métodos de controle em cada tentativa.
Interrompa a simulação de execução, clicando novamente sobre o ícone do botão Play e retornando à aba Scene. Não se esqueça de salvar a cena (menu File, Save) e o projeto (menu File, Save Project) antes de fechar o Unity.
Próximos passos
Finalmente, nos debruçamos sobre um dos principais bugs de nosso projeto, cuja presença poderia inviabilizar a conclusão da aventura em diferentes casos, frustrando (e com razão) a jogatina dos gamers fissurados em tratamentos médicos virtuais.
A conclusão da construção de nosso jogo está se aproximando, e nos próximos encontros daremos sequência à configuração dos elementos de interface restantes, tais como as telas de pause e de créditos do game.
Nos encontraremos novamente no próximo dia 23 de agosto. Até mais! Fique ligado sempre nas novidades do GameBlast!
Revisão: Ives Boitano


















