Aprendendo a programar jogos em Unity: limitando o espaço das pílulas no labirinto | Pixelando
Home/Games e Consoles/aprendendo-a-programar-jogos-em-unity-limitando-o-espaco-das-pilulas-no-labirinto-14
Games e Consoles
Aprendendo a programar jogos em Unity: limitando o espaço das pílulas no labirinto
P
Redação Pixelando
14/12/2025
Foto: GameBlast
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity! Após realizarmos, em nosso encontro anterior, importantes ligações entre os módulos, que permitiram experimentarmos, em primeira mão, boa parte da aventura de forma encadeada, realizaremos hoje interessantes ajustes em elementos pertencentes ao labirinto, para que possamos impedir as pílulas de realizarem ações indevidas durante a etapa do tratamento, tais como a “decolagem” dos medicamentos para fora do cenário.
Caso este seja seu primeiro contato com conteúdos de nossa série, sinta-se especialmente convidado a juntar-se a nós em uma interessante trilha de aprendizados sobre o mundo do desenvolvimento de jogos digitais.
Por meio do uso da ferramenta Unity, vamos descobrindo juntos a tirar do papel jogos dos mais diversos estilos gráficos e de gameplay. Para tal, a partir do primeiro texto de nossa série, vamos elaborando divertidos projetos de games 2D e 3D, aprendendo desde os passos mais elementares do processo, como a instalação e a configuração da ferramenta em nossos computadores, até as etapas que envolvem, de fato, a codificação dos desafios, a definição dos objetivos e a configuração dos elementos das fases.
Atualmente, estamos trabalhando no projeto do terceiro jogo de nossa série. Trata-se do game Consultório do Dr. Tratanildo, um puzzle ambientado em um consultório médico tridimensional, cujos aspectos de gameplay prestam homenagem a clássicos dos anos 1980 e 1990, tais como Pac-Man (Namco, 1980) e Dr. Mario (Nintendo, 1990).
Não se preocupe se você não tem experiências prévias em programação de jogos ou de sistemas em geral. Nesta série, fazemos questão de explicar todas as decisões tomadas na construção de um game de forma didática, mostrando os porquês de cada passo realizado. Dessa forma, esperamos que, posteriormente, você possa construir os seus próprios jogos da forma que considerar melhor.
E então, gostou da ideia de ver o game dos seus sonhos se tornar realidade? Se sim, não perca mais tempo: vamos juntos nessa jornada rumo a novos conhecimentos!
Consertando as barreiras
Durante os testes realizados ao final de nosso último encontro, pudemos perceber que ainda temos um considerável caminho de correções de bugs e elaboração de melhorias pela frente. Um dos elementos que merece nossa atenção tem a ver com o núcleo do desafio proposto pelo jogo: o controle do labirinto que representa o interior dos corpos dos pacientes.
Embora a movimentação e o controle estejam ocorrendo de forma satisfatória, em determinadas situações podemos perceber que as pílulas de saúde não se comportam tão bem quando estão sob influência de colisões com elementos do cenário. O exemplo a seguir ilustra o que anda ocorrendo com nossas pílulas ao esbarrarem nas extremidades do cenário durante o processo de inclinação:
Pois é, deu pra perceber que a pílula azul resolveu “decolar” do labirinto no meio do tratamento. Apesar de termos configurado previamente elementos como Box Colliders e Rigidbodies para paredes e obstáculos, precisaremos modificar alguns parâmetros visando permitir que nosso jogo se comporte adequadamente, evitando frustrar os jogadores de forma desnecessária.
Para realizar os ajustes, vamos abrir nosso projeto para edição. No Unity Hub, clique duas vezes sobre o item referente a ele. Na interface inicial do editor, na aba Project, abra a pasta Assets, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene.
Para começarmos as correções, é interessante visualizarmos temporariamente o objeto Labirinto, que encontra-se desativado. Por meio da aba Hierarchy, selecione o GameObject e, via aba Inspector, torne-o ativo, conforme exemplificado pela imagem a seguir:
O próximo passo envolverá aumentarmos um pouco as dimensões das paredes do labirinto, pois, pelo que pudemos perceber pela simulação de execução realizada no encontro anterior, talvez não seja tão boa ideia manter as barreiras com as mesmas dimensões de altura que as pílulas de saúde, sobretudo em casos de impactos significativos.
Selecione os objetos LabParede1, LabParede2, LabParede3 e LabParede4, subordinados a Labirinto. Na aba Inspector, modifique o valor do atributo Position Y para 1 e de Scale Y para 3. Dessa forma, as paredes crescerão em altura, mantendo a referência à base LabFundo, o que, na prática, evitará termos de alterar dimensões e posicionamentos para medicamentos, agentes de doenças, chão do labirinto e afins.
Seguindo nessa mesma linha de raciocínio, ajustaremos também os parâmetros referentes aos obstáculos internos do labirinto. Selecione o GameObjectCubeRef, subordinado a Obstaculos. Na aba Inspector, modifique o valor do atributo Position Y para 0.5 e de Scale Y para 2, conforme ilustrado a seguir.
Uma tampa transparente
Em relação aos problemas observados nos deslocamentos “normais”, causados pela movimentação do aparato médico atrelado ao leito, já resolvemos boa parte da questão. Porém, seria mais prudente ainda se pudéssemos fazer como os fabricantes de máquinas de pinball, colocando uma tampa transparente acima da visualização dos elementos internos do labirinto.
As dimensões dessa “tampa hipotética”, a princípio, deveriam ser semelhantes às do fundo do labirinto. Por isso, vamos utilizá-lo como base para sua construção. Na aba Hierarchy, clique com o botão direito sobre o objeto LabFundo e selecione a opção Duplicate.
Nomeie o objeto recém-inserido como “LabTampaTransparente”, alterando os seguintes atributos de seu componente Transform:
Position Y = 2.5;
Scale Y = 0.5.
Em seguida, aproveite para reordená-lo na lista de objetos subordinados a Labirinto, deixando-o logo após LabFundo, conforme exemplificado a seguir:
A modificação do parâmetro Position Y serviu para trazer a tampa ao posicionamento a qual esperamos que ela fique presente, no caso, acima da visualização dos agentes de doenças e das pílulas. Já a modificação do valor de Scale Y foi realizada para deixar a tampa mais fina, impedindo que ela bloqueie o giro das pílulas no cenário por questão de atrito com seus colisores.
Embora posicionada a contento, deu pra perceber que a tampa não anda tão transparente quanto gostaríamos. Para que ela possa ser (não) visualizada dessa forma, é preciso criarmos um novo Material, de coloração transparente, a ser atrelado ao GameObject.
Na aba Project, abra as pastas Assets, Multimedia e, por fim, 3D. Clique com o botão direito sobre uma área vazia da janela e, no menu suspenso, selecione a opção Create e, em seguida, Material. Nomeie o novo elemento como “MaterialTransparente”, conforme exemplificado pela imagem a seguir:
Clique sobre o ícone que representa MaterialTransparente e, na aba Inspector, conceda os seguintes valores a seus respectivos atributos:
Rendering Mode: Transparent;
Main Maps:
Albedo: selecione qualquer cor que apresente o valor de A = 0 (ex.: R = 255, G = 255, B = 255, A = 0);
Metallic = 0;
Smoothness = 0.
Forward Rendering Options:
Specular Highlights: deixe a caixa de seleção vazia (false);
Reflections: deixe a caixa de seleção vazia (false).
Os demais atributos presentes na visualização da aba Inspector podem ser mantidos com os valores padrão, conforme ilustrado a seguir:
As alterações concretizadas sobre os parâmetros do Material visam conceder propriedades de transparência amplas, inclusive impedindo a influência de reflexos sobre o elemento a qual atrelaremos o Material, comportamento este que podemos restaurar posteriormente, caso julguemos necessário.
Voltando à aba Hierarchy, selecione novamente LabTampaTransparente. Na aba Inspector, localize seu componente Mesh Renderer e realize a seguinte sequência de modificações a seus atributos:
Materials:
Element 0: Indique ao campo do atributo o elemento correspondente ao MaterialMaterialTransparente;
Lighting:
Cast Shadows = Off;
Receive Shadows = deixe a caixa de seleção vazia (false).
Modelos de detecção
A última alteração que realizaremos no encontro de hoje tem relação com a detecção de colisões por parte das pílulas de saúde, que encontram-se no momento com componentes do tipo Rigidbody atrelados a si.
O Unity apresenta internamente diferentes modelos para detecção de colisões entre objetos. O modelo padrão demanda poucos cálculos do processador e atende bem a maioria das situações de jogo, porém, dependendo do caso, acaba sendo suscetível a falhas, sobretudo quando há alteração dinâmica de posicionamento e rotação de elementos em movimento durante a atualização dos quadros (frames).
Para evitar que esse tipo de situação prejudique o andamento do jogo, seria interessante indicarmos ao Unity a necessidade de utilizarmos um modelo mais refinado de detecção de colisões, ao menos para as pílulas que percorrem o labirinto.
Na aba Project, abra as pastas Assets, Multimedia, 3D, NossasPilulas e, por fim, PilulasLaboratorio. Selecione os itens correspondentes aos cinco Prefabs representantes das pílulas e, na aba Inspector, altere o valor do atributo Collision Detection de seu componente Rigidbody para Continuous.
O modelo de detecção contínua utiliza mais processamento para calcular as colisões, porém é mais confiável para a utilização por elementos em jogos que demandam interações físicas constantes, como é o nosso. Além disso, por estar sendo utilizado apenas pelas pílulas do labirinto, não acabará impactando significativamente na performance do jogo.
Por fim, na aba Hierarchy, selecione novamente o GameObject Labirinto e, via aba Inspector, desative-o, deixando a caixa de seleção correspondente vazia.
Que tal experimentar a simulação da execução do game? Para isso, vá até a aba Game e clique sobre o ícone do botão Play. Use e abuse de movimentações no labirinto, visando perceber as mudanças comportamentais da pílula e das barreiras do cenário.
Ao final das experimentações, não se esqueça de interromper a simulação da execução, clicando novamente sobre o ícone do botão Play e retornando à aba Scene. Salve a cena (menu File, opção Save) e o projeto (menu File, opção Save Project) antes de fechar o Unity.
Próximos passos
É sempre bom corrigirmos comportamentos indesejados de nosso game, sobretudo antes do lançamento, pois, dessa forma, evitamos expor o jogo a julgamentos de jogadores que tiveram suas expectativas frustradas devido a um bug ou outro problema observado.
Em nossos próximos encontros, continuaremos a corrigir determinados elementos dos módulos de nosso jogo, além de “prepararmos o terreno” para a implementação das condições de vitória e de derrota do game, com o consequente encadeamento das fases do jogo, formando a estrutura principal dessa aventura.
Nosso próximo encontro será no dia 21 de dezembro. Até mais! Fique sempre ligado nas novidades do GameBlast!