Aprendendo a programar jogos em Unity: iniciando a elaboração de nosso “labirinto da saúde” tridimensional

Começaremos a elaborar e testar o funcionamento do módulo do game responsável pelo tratamento das doenças dos pacientes pelo médico.

em 17/11/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Em nosso encontro anterior, além de realizarmos alguns ajustes pontuais em relação à movimentação de nosso personagem principal pelo cenário, começamos a implementar de forma gradual alguns métodos de interação entre o médico e as pílulas da saúde espalhadas pelo cenário.

Hoje, assim como anunciado anteriormente, daremos uma pausa breve nas necessárias correções relativas ao manejo da movimentação do personagem pelo cenário para darmos início à elaboração da “segunda parte” de nosso game, que terá relação direta com os excêntricos tratamentos a serem aplicados aos pacientes que adentram no Consultório do Dr. Tratanildo.


Se esta for a primeira vez que você acessa o conteúdo disponibilizado em nossa série, considere-se especialmente convidado a juntar-se a nós em uma divertida jornada de aprendizados sobre o intrigante universo do desenvolvimento de games.

Utilizando a ferramenta Unity como pano de fundo para desenvolvermos novas habilidades e conhecimentos, a partir do primeiro texto da série iremos aprender a elaborar cenários, posicionar elementos das fases, configurar personagens e objetos, codificar scripts controladores de comportamentos e de regras de um jogo, dentre diversos outros elementos importantes para que possamos, enfim, criar jogos de diferentes formas e estilos.

Mesmo se você nunca teve contato direto com conteúdos sobre o tema, fique tranquilo: tudo é elaborado de forma didática, passo a passo, desde a instalação da ferramenta em nossos computadores até a execução dos passos descritos anteriormente. Até o momento já elaboramos dois jogos em nossa jornada: Forest Ping Pong e Motorista da Pesada:

Dessa forma, quem sabe você não poderá tirar do papel os games que sempre idealizou em sua mente, mas que, até o momento, não havia tido a oportunidade de jogar na “vida real”? Venha conosco e, juntos, iremos seguir nesta caminhada rumo a novos conhecimentos!

Um labirinto diferente

Relembrando um pouco sobre o enredo escolhido para nosso game, o tratamento miraculoso de doutor Tratanildo Doencita envolve a utilização das pílulas da saúde, remédios especiais que chegarão ao foco das doenças dentro do corpo do paciente por meio do manejo de uma máquina especial, acoplada a uma cama de hospital. Essa máquina será a responsável por inclinar a cama, fazendo com que os corpos dos pacientes inclinem também.

Iremos representar o interior dos corpos dos pacientes de forma semelhante a um labirinto. Ao inclinarmos os enfermos, os medicamentos irão percorrer os caminhos “rolando”, de forma semelhante ao que podemos observar em jogos como Tama (Time Warner Interactive, 1994).

Que tal, então, começarmos a construir a estrutura básica desses labirintos no Unity? Para tal, vamos abrir nosso 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 editor, na aba Project, abra a pasta Assets, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene. Certifique-se de estar com a aba Scene em evidência na tela, conforme exemplificado pela imagem a seguir:

Na aba Hierarchy, clique com o botão direito sobre ConsultorioScene. No menu suspenso, selecione a opção GameObject e, por fim, Create Empty. Um novo objeto será criado, conceda-lhe o nome “Labirinto”, sem as aspas. Conceda os seguintes valores aos parâmetros de seu componente Transform:
  • Position X = 0, Y = 0, Z = 60;
  • Rotation X, Y e Z = 0;
  • Scale X, Y e Z = 1.
O GameObject Labirinto irá agrupar todos os elementos que farão parte do módulo de interação entre as pílulas da saúde e as doenças, ou seja: esse representará a parte interna do corpo dos pacientes.

Talvez você possa estar se perguntando o porquê de termos posicionado Labirinto do lado de fora do consultório se os pacientes serão tratados dentro do estabelecimento. Embora, de fato, não tenhamos esta estrutura posicionada dentro do cenário criado, aos olhos do jogador isto será imperceptível, pois iremos configurar posteriormente uma câmera exclusiva para o referido modo de jogo, possibilitando a sobreposição da imagem do “interior da barriga” do paciente aos elementos tridimensionais já estabelecidos no consultório.

Agora, na aba Hierarchy, vamos iniciar a construção das paredes do labirinto, clicando com o botão direito sobre seu GameObject e, no menu suspenso, selecionando a opção 3D Object e, em seguida, Cube, conforme exemplificado a seguir:


Conceda o nome “LabParede1” ao novo objeto subordinado à Labirinto. Em relação a seu componente Transform, altere o valor do parâmetro Position Z para 10 e o valor de Scale X para 20:

Duplique LabParede1, clicando com o botão direito sobre o objeto na aba Hierarchy e selecionando a opção Duplicate. Renomeie o novo GameObject para “LabParede2” e altere o valor do parâmetro Position Z de seu componente Transform para -10. Formaremos, assim, duas paredes paralelas uma à outra.

Novamente, iremos à aba Hierarchy para inserir outro objeto subordinado à Labirinto. Clique com o botão direito sobre seu GameObject e, no menu suspenso, selecione a opção 3D Object e, em seguida, Cube. O novo objeto receberá o nome “LabParede3” e estes são os valores a serem concedidos aos parâmetros de seu componente Transform:
  • Position X = 10, Y = 0, Z = 0;
  • Rotation X = 0, Y = 90, Z = 0;
  • Scale X = 20, Y = 1, Z = 1.
Por fim, assim como fizemos para criar LabParede2, iremos duplicar LabParede3, alterando apenas o nome do novo GameObject para “LabParede4” e o valor do parâmetro Position X de seu componente Transform para -10.

Para finalizarmos a criação do cenário básico de nosso labirinto, nos falta inserir o elemento que representará seu chão. Para isso, na aba Hierarchy, clique com o botão direito sobre Labirinto. No menu suspenso apresentado, selecione a opção 3D Object e, em seguida, Cube. O novo GameObject receberá o nome “LabFundo”, devendo ser configurado com os seguintes valores para os parâmetros de seu componente Transform:
  • Position X = 0, Y = -1, Z = 0;
  • Rotation X, Y e Z = 0;
  • Scale X = 20, Y = 1, Z = 20.

Elementos internos

Já temos um “cercadinho tridimensional” básico para nosso labirinto, porém nos falta ainda criarmos os caminhos internos para podermos, de fato, implementar desafios interessantes envolvendo sua utilização.

Como cada paciente pode apresentar características diferentes, também seria interessante termos conjuntos de “caminhos” diferentes dentro de cada caso a ser tratado. Para facilitar a posterior configuração dos obstáculos que serão posicionados dentro de Labirinto, na aba Hierarchy clique com botão direito sobre o referido objeto e selecione a opção Create Empty.

Dê o nome “Obstaculos” ao novo GameObject criado, mantendo os valores padrão para os parâmetros de seu componente Transform.

De forma a testarmos inicialmente a eficácia do que estamos criando, fique à vontade para inserir alguns GameObjects tridimensionais de diferentes tamanhos de forma subordinada à Obstaculos. Em meu exemplo, resolvi criar três cubos de dimensões diferentes, posicionando-os aleatoriamente dentro do tabuleiro criado:

Agora, assim como inserimos em cena o GameObject Obstaculos para agrupar todos os elementos que servirão de composição aos labirintos a serem delineados, vamos criar dois novos GameObjects subordinados à Labirinto, sendo um deles o responsável por agrupar as pílulas da saúde a serem utilizadas no tratamento (GameObject de nome “Medicamentos”) e o outro para agrupar os agentes de doenças que percorrem livremente o interior dos corpos dos pobres enfermos (GameObject de nome “Doencas”):

Remédios em ação (ou quase isso)

Na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, NossasPilulas. Selecione o item referente ao prefab Pilula_vermelha e arraste-o em direção ao objeto recém-criado Medicamentos, na aba Hierarchy. Um novo GameObject, também de nome Pilula_vermelha, será acrescido à visualização da aba:

Vamos configurar previamente um dos medicamentos os quais temos à disposição para testarmos a viabilidade da abordagem que estamos prestes a iniciar seu desenvolvimento. Para tal, selecione Pilula_vermelha na aba Hierarchy e certifique-se de que os seguintes valores foram concedidos aos parâmetros de seu componente Transform:
  • Position X , Y e Z = 0;
  • Rotation X, Y e Z = 0;
  • Scale X, Y e Z = 7.
Ainda com o referido GameObject em evidência, na aba Inspector clique com o botão direito sobre seu componente Box Collider e selecione a opção Remove Component. Desta forma, abriremos caminho para configurarmos um colisor em formato esférico, deixando o elemento pronto para rolar pelos caminhos do labirinto:


Clique agora no botão Add Component da aba Inspector e insira um componente do tipo Sphere Collider. Altere o valor de seu parâmetro Radius para 0.15, conforme exemplo a seguir:

Como as dimensões do novo colisor fazem com que ele adentre um pouco sobre a estrutura do chão do labirinto, vamos alterar o valor do parâmetro Position Y do componente Transform de Pilula_vermelha para 0.5.


Por fim, adicione um componente do tipo Rigidbody ao objeto, mantendo os valores padrão para seus atributos.

Que tal testarmos a execução do game para verificarmos como estes novos elementos irão se comportar, mesmo que de forma ainda não definitiva?

Para isso, além de pressionarmos o ícone do botão Play, após sermos redirecionados à aba Game retornaremos à aba Scene (ainda com a simulação em execução), daremos foco ao objeto Labirinto (clicando duas vezes sobre seu elemento, na aba Hierarchy) e brincaremos um pouco com os valores do atributo Rotation de seu Transform. Siga conforme demonstrado pela animação a seguir:

Já pudemos ter uma boa ideia de como funcionará essa etapa de nosso game, mesmo antes de necessários ajustes a serem realizados. Pressione novamente o botão Play para retornarmos ao modo de edição. Não se preocupe com os valores do atributo Rotation alterados durante a execução, eles retornam aos valores “definitivos” ao interrompermos a simulação.

Não se esqueça de salvar a cena (menu File, opção Save) e o projeto (menu File, opção Save Project) antes de fechar o editor.

Próximos passos

Demos início hoje a um processo muito importante de nosso jogo, que é a construção inicial da estrutura que servirá em nossa aventura como pano de fundo para os mais loucos tratamentos de saúde do mundo dos games.

Prosseguiremos em nossos próximos encontros com a construção desse módulo do jogo além de outras configurações necessárias para o game como um todo, a fim de transformar essas experiências que hoje estão desconexas em algo interessante de se ver (e de se jogar, é claro).

Nosso próximo texto já encontra-se disponível, continue conosco nessa jornada de conhecimento e fique ligado sempre aqui no GameBlast!

Revisão: Juliana Piombo dos Santos

Entendo videogames como sendo uma expressão de arte e lazer e, também, como uma impactante ferramenta de educação. No momento, doutorando em Sistemas da Informação pela EACH-USP, desenvolvendo jogos e sistemas desde 2020. Se quiser bater um papo comigo, nas redes sociais procure por @RodrigoGPontes.
Este texto não representa a opinião do GameBlast. Somos uma comunidade de gamers aberta às visões e experiências de cada autor. Escrevemos sob a licença Creative Commons BY-SA 3.0 - você pode usar e compartilhar este conteúdo desde que credite o autor e veículo original.