Aprendendo a programar jogos em Unity: as doenças estão invadindo nosso game, e isso é muito bom!

Iremos aproveitar o início da construção do labirinto para introduzir elementos que representarão as doenças em nosso game.

em 24/11/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após iniciarmos em nosso encontro anterior a elaboração do labirinto que irá representar o interior dos corpos dos pacientes, podemos agora introduzir em nosso game os modelos tridimensionais que representarão os agentes de doenças, estes que serão combatidos com muito vigor pelo médico mais excêntrico do mundo dos games em Consultório do Dr. Tratanildo.


Se esta for a primeira vez que você acessa nossa série, não se acanhe e junte-se a nós em uma lúdica jornada de descobertas, experimentações e muitos aprendizados sobre como a ferramenta Unity pode nos auxiliar no processo de criação de diferentes tipos de jogos. A partir do primeiro texto da série, somos convidados a aprender diferentes conceitos e práticas pertencentes ao universo de desenvolvimento de games de forma prática, por meio da elaboração de variados projetos.

Desde a instalação e configuração da ferramenta em nossos computadores até a realização de diferentes atividades, como a inserção de elementos multimídia nas cenas de um game e a configuração do comportamento de personagens e de objetos por meio de programação de scripts, todos os passos da série são desenvolvidos para que mesmo quem nunca teve contato direto com conteúdos sobre o tema possa aprender o suficiente para que, no futuro, possa tirar do papel os jogos que sempre sonhou em tornar realidade.

Venha conosco e, juntos, vamos seguir nesta caminhada rumo a novos conhecimentos!

Um monstrinho “da moléstia”

Após iniciarmos a construção do cenário que irá representar o interior dos pacientes, realizamos alguns testes interessantes envolvendo inclinações da estrutura do labirinto e a consequente movimentação do elemento que representa uma pílula da saúde pelos caminhos construídos:

Que tal, agora, conferirmos como será realizada a interação entre as pílulas da saúde e as doenças que devem ser eliminadas? Como nosso jogo não pertence ao gênero dos jogos de terror (ao menos não intencionalmente), as doenças serão representadas por elementos simpáticos, como o pequeno monstrinho verde representado pela imagem a seguir:

Vamos inserir seu modelo tridimensional dentro do labirinto para estudarmos possíveis comportamentos a serem configurados no contexto de nosso game. 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:

Primeiramente, na aba Hierarchy, deixe à mostra os GameObjects que são subordinados a Labirinto, clicando na setinha presente ao lado esquerdo do objeto, conforme exemplificado a seguir:


Na aba Project, abra as pastas Assets, Multimedia e, por fim, 3D. Selecione o elemento de nome “slimemodel 1”, clique e arraste seu ícone em direção ao GameObject Doencas, presente na listagem da aba Hierarchy. Conceda o nome “DoencaVerde”, sem as aspas, para o novo objeto inserido em cena.

Selecione DoencaVerde e, na aba Inspector, conceda os seguintes valores aos parâmetros de seu componente Transform:
  • Position X = 5, Y = 0, Z = 0;
  • Rotation X = 0, Y = 270, Z = 0;
  • Scale X, Y e Z = 0.5.

Ainda na aba Inspector, insira um componente do tipo Box Collider ao objeto em questão. Iremos configurá-lo para que, assim que a pílula de saúde entre em contato com o GameObject representante das doenças, algum comportamento possa ser executado, dependendo da cor do medicamento e do monstrinho em questão.

Os valores a serem concedidos para os parâmetros do componente Box Collider de DoencaVerde estão descritos a seguir:
  • Is Trigger = true (deixar a caixa de seleção marcada);
  • Center X = 0, Y = 0.75, Z = 0;
  • Size X = 3, Y = 3.5, Z = 3.

Interações entre doenças e remédios

Agora, vamos codificar por meio de um script uma possível interação entre o elemento que representa as doenças e as pílulas da saúde. Para tal, na aba Project, abra a pasta Assets e, em seguida, Scripts. Crie um novo script de nome “ComportamentoDoenca”, sem as aspas.

Clique duas vezes sobre o ícone do novo script para realizarmos sua edição no Visual Studio. Vamos substituir o conteúdo do script referente aos métodos padrão (void Start() e void Update()) pelo código a seguir:

    public bool isVerde, isVermelho, isAmarelo, isAzul, isRoxo;

    private void OnTriggerEnter(Collider other)
    {
        if (isVerde && other.tag == "medicamentoVerde")
            Destroy(gameObject);
    }

O trecho de código que acabamos de inserir servirá para os seguintes propósitos:
  • A declaração das variáveis públicas isVerde, isVermelho, isAmarelo, isAzul e isRoxo permitirá indicarmos ao Unity a qual tipo de doença pertence o GameObject que estiver com o script ComportamentoDoenca atrelado;
  • O código pertencente ao método OnTriggerEnter somente será executado quando houver algum elemento em cena colidindo com o objeto em questão, de forma semelhante ao que fizemos em projetos anteriores (utilizando o método OnTriggerEnter2D);
  • O trecho de código inserido dentro das chaves de OnTriggerEnter indica que, caso trate-se de uma doença da cor verde (isVerde) que esteja sofrendo colisão de um elemento em cena com a tag de nome “medicamentoVerde”, o objeto em questão será destruído (eliminado da cena).
De forma resumida, o código inserido permitirá que doenças representadas por monstrinhos de uma determinada cor sejam eliminadas apenas por pílulas da saúde da mesma cor.

Salve o script, minimize o Visual Studio e retorne ao editor do Unity. Na aba Hierarchy, selecione DoencaVerde, subordinado a Doencas. Acrescente um componente Comportamento Doenca ao objeto, via aba Inspector. Nas propriedades do componente, deixe selecionada a opção Is Verde, conforme exemplificado a seguir:

Como até o momento temos apenas uma pílula na cor vermelha inserida no labirinto, vamos colocar em cena também uma pílula na cor verde. Assim, poderemos testar de forma mais assertiva a interação entre remédios e doenças que foi codificada por meio do script que elaboramos há pouco.

Na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, NossasPilulas. Selecione o elemento de nome “Pilula_verde”, clique e arraste seu ícone em direção ao GameObject Medicamentos, presente na listagem da aba Hierarchy.

Na aba Hierarchy, selecione o recém-inserido objeto Pilula_verde e, na aba Inspector, conceda os seguintes valores aos parâmetros de seu componente Transform:
  • Position X = 6, Y = 0.5, Z = 4;
  • Rotation X, Y e Z = 0;
  • Scale X, Y e Z = 7.
Assim como fizemos no encontro anterior em relação ao GameObject Pilula_vermelha, realize a seguinte sequência de ações para Pilula_verde, a fim de deixarmos os dois objetos que representam os miraculosos medicamentos em cena com os mesmos atributos básicos:
  • Na aba Inspector clique com o botão direito sobre seu componente Box Collider e selecione a opção Remove Component;
  • Adicione ao objeto um componente do tipo Sphere Collider, alterando o valor de seu parâmetro para 0.15;
  • Adicione um componente do tipo Rigidbody ao objeto, mantendo os valores padrão para seus atributos.

Utilizando tags

Um dos métodos utilizados para identificar qual é a natureza de um elemento que entra em colisão com outro em cena (ou que sofra colisão) é por meio da concessão de tags aos GameObjects de tal interação. 

Chegamos a utilizar de tal método quando, em um dos encontros para a elaboração do projeto Motorista da Pesada, precisamos identificar, dentre os objetos coletáveis, quais seriam considerados “presentes” e quais seriam considerados “bombinhas”:

Faremos o mesmo em nosso projeto atual, aplicando tags aos elementos que representam as pílulas de saúde no labirinto. Para tal, ainda com o GameObject Pilula_verde em evidência, na aba Inspector clicaremos sobre a lista de opções do parâmetro Tag e selecionaremos a opção Add Tag...

Insira as seguintes tags à listagem, clicando sobre o ícone com o sinal de “mais” (destacado em verde na imagem a seguir), digitando os respectivos nomes e, em seguida, selecionando a opção Save:
  • medicamentoVerde;
  • medicamentoVermelho;
  • medicamentoAmarelo;
  • medicamentoAzul;
  • medicamentoRoxo.

Com as novas tags devidamente registradas, na aba Hierarchy, volte a selecionar Pilula_verde. Na aba Inspector, clique sobre a lista de opções do parâmetro Tag e selecione a opção medicamentoVerde.

Realize a mesma ação para o objeto Pilula_vermelha, porém concedendo a este GameObject a tag de nome medicamentoVermelho:

Agora que já temos um monstrinho verde devidamente configurado no labirinto junto a duas pílulas da saúde de cores diferentes devidamente posicionadas no cenário, que tal repetirmos o teste de execução que realizamos em nosso encontro anterior para verificarmos se, de fato, notaremos diferenças comportamentais na interação entre dois medicamentos de tipos diferentes e o agente de doenças em cena?

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), selecionaremos o objeto Labirinto e brincaremos um pouco com os valores do atributo Rotation de seu Transform. Siga conforme demonstrado pela animação a seguir:

Veja que, assim como determinamos por meio da programação do script, apenas teremos a ação efetiva do medicamento sobre a doença no organismo se, ao encostar no agente causador da doença, os tipos de ambos os elementos forem compatíveis: pílulas verdes contra doenças verdes, pílulas vermelhas contra doenças vermelhas, e assim sucessivamente.

Pressione novamente o botão Play para retornarmos ao modo de ediçã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

Agora a brincadeira está ficando séria: as doenças estão invadindo nossa aventura, o que garantirá posteriormente muito trabalho ao doutor Tratanildo Doencita e, claro, muita diversão aos jogadores de nosso game.

Prosseguiremos em nossos próximos encontros configurando o comportamento dos elementos gerais de nossa aventura, além de elaborarmos melhor a composição gráfica do labirinto, as regras para controlar os elementos presentes no cenário e outros aspectos bem importantes de nosso projeto.

Nosso próximo encontro será no dia primeiro de dezembro. Até mais! Fique sempre ligado nas novidades do GameBlast!

Revisão: Davi Sousa

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.