Aprendendo a programar jogos em Unity: uma invasão de monstros coloridos em cena

Daremos sequência ao desenvolvimento de novas cepas de micróbios, configurando adequadamente seus comportamentos.

em 12/01/2025
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após o surgimento, no encontro anterior, da variante amarela do agente de doenças, desenvolveremos mais alguns Prefab Variants em nosso projeto para que possamos representar os demais monstrinhos coloridos no labirinto.

Se esta for a primeira vez que você acessa um texto de nossa série, considere-se especialmente convidado(a) a juntar-se a nós em uma interessante trilha, repleta de experimentações e aprendizados sobre o universo do desenvolvimento de jogos. Por meio da elaboração de diferentes projetos práticos, teremos a oportunidade de descobrir como a ferramenta Unity pode nos auxiliar em diversas etapas do processo de criação de games dos mais variados estilos.

Atualmente, estamos elaborando o platformer 3D Consultório do Dr. Tratanildo. Trata-se de um jogo ambientado em um consultório médico tridimensional, cuja gameplay mescla influências de títulos clássicos, tais como Pac-Man e Dr. Mario.


Esta série é voltada a todos aqueles que queiram tirar do papel os games que sempre sonharam em ver tornarem-se realidade, mesmo aos que nunca tiveram contato antes com conteúdos sobre programação de jogos.

A partir do primeiro texto, são abordados desde os tópicos mais elementares, como a instalação e configuração da ferramenta em nossos computadores, até os que, de fato, têm relação com a criação dos jogos em si, tais como a inserção e posicionamento de conteúdos multimídia em cenas, criação de fases e a codificação de comportamentos e das regras de um game.

Venha conosco para, juntos, seguirmos nesta caminhada rumo a novos conhecimentos!

Patologias coloridas  

No momento em que criamos o primeiro Prefab referente ao agente de doenças “original” de nosso projeto, acabamos por abrir caminho para a proliferação maciça de variantes em cena, tais como o micróbio amarelo que implementamos em nosso encontro anterior. Sendo assim, a partir de agora, introduziremos em nosso projeto os demais microrganismos, cujas respectivas colorações farão correspondência às pigmentações adotadas na composição visual das pílulas de saúde.

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.

Na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, NossasDoencas. Clique com o botão direito sobre o ícone de DoencaVerde e, no menu suspenso, selecione a opção Create e, em seguida, Prefab Variant.

Conceda o nome “DoencaAzul” ao novo elemento, sem as aspas. Após nomeá-lo, clique duas vezes sobre seu ícone para iniciarmos sua edição.

Assim como fizemos anteriormente para a variante amarela do agente de doenças, vamos alterar o material utilizado na composição visual do corpo do microrganismo para que sua coloração se assemelhe à da pílula azul.

Para isso, na aba Hierarchy, selecione o GameObject Model e, na aba Inspector, modifique o valor de Element 0 do parâmetro Material de seu componente Skinned Mesh Renderer para o elemento de nome matPilula_azul.

Em seguida, selecione o objeto DoencaAzul. Na aba Inspector, deixe apenas a opção Is Azul selecionada na lista de parâmetros de Comportamento Doenca, conforme exemplificado pela imagem a seguir:

Certifique-se de que a opção Auto Save está selecionada e clique na seta ao lado do nome do Prefab para finalizarmos as edições do micróbio azul.

Seguindo os mesmos passos que realizamos para criar DoencaAzul, crie um novo Prefab Variant a partir de DoencaVerde, concedendo-lhe o nome “DoencaRoxa”, sem as aspas, e abra-o para edição.

Selecione o GameObject subordinado Model e, via aba Inspector, modifique o valor de Element 0 do parâmetro Material de seu componente Skinned Mesh Renderer para o elemento de nome matPilula_roxa.

Finalizando sua edição, selecione o objeto DoencaRoxa e, na aba Inspector, deixe apenas a opção Is Roxa selecionada na lista de parâmetros de Comportamento Doenca.

Novamente, certifique-se de que a opção Auto Save está selecionada e clique na seta ao lado do nome do Prefab para retornarmos ao modo de edição da cena.

Por fim, mas não menos importante, é hora de criarmos a variante vermelha do microrganismo. Crie um novo Prefab Variant a partir de DoencaVerde, nomeando-o como “DoencaVermelha”, sem as aspas.

Ao realizarmos edições na nova variante criada, desta vez teremos de tomar cuidado ao modificarmos o valor do parâmetro Material do Skinned Mesh Renderer de Model: como para a criação de nossa primeira pílula não foi necessário criar um material contendo especificamente a cor vermelha, não temos à disposição um “matPilula_vermelha”. Neste caso, iremos escolher o elemento de nome Material.002 que, especificamente, apresente coloração vermelha, conforme ilustrado pela imagem a seguir:

Em seguida, selecione o objeto DoencaVermelha e, na aba Inspector, deixe apenas a opção Is Vermelha selecionada na lista de parâmetros de Comportamento Doenca. Retorne ao modo de edição da cena logo após a realização dessa configuração.

Finalmente, temos à disposição os Prefabs do “quinteto do terror”: DoencaAmarela, DoencaAzul, DoencaRoxa, DoencaVerde e DoencaVermelha.

Testando as interações

Vamos inserir alguns micróbios coloridos no labirinto para realizarmos alguns testes relacionados à interação entre os agentes de doenças e as pílulas miraculosas.

Na aba Project, ainda com a pasta NossasDoencas em evidência, clique e arraste o ícone do item DoencaVermelha em direção ao GameObject Doencas, presente na aba Hierarchy. Certifique-se de que o novo objeto encontra-se subordinado a Doencas, conforme exemplificado a seguir:

Na aba Hierarchy, selecione DoencaVermelha. Iremos alterar os valores dos atributos de seu componente Transform, via aba Inspector, conforme listado a seguir:
  • Position X = 5, Y = 0, Z = 8;
  • Rotation X = 0, Y = 270, Z = 0;
  • Scale X, Y e Z = 0.5.

Com o micróbio vermelho devidamente posicionado, chegou a vez do agente de doenças roxo. Na aba Project, clique e arraste o ícone do item DoencaRoxa em direção ao GameObject Doencas, presente na aba Hierarchy. Os valores a ser concedidos aos atributos do componente Transform do novo GameObject serão estes:
  • Position X = 4, Y = 0, Z = -8;
  • Rotation X = 0, Y = 270, Z = 0;
  • Scale X, Y e Z = 0.5.
Por fim, é hora de inserirmos o microrganismo azul no labirinto. Na aba Project, clique e arraste o ícone do item DoencaAzul em direção ao GameObject Doencas, presente na aba Hierarchy. Altere os valores dos atributos do componente Transform do objeto recém-inserido para os elencados a seguir:
  • Position X = -7, Y = 0, Z = 7;
  • Rotation X = 0, Y = 270, Z = 0;
  • Scale X, Y e Z = 0.5.
Agora que temos todas as variantes dos agentes de doenças posicionadas no cenário, prontas a ser testadas, que tal experimentarmos a simulação da execução do game? Para isso, vá à aba Game e clique sobre o ícone do botão Play:

Os monstrinhos ficaram bem posicionados em cena, porém foi possível perceber que está ocorrendo um comportamento inconsistente em nosso projeto: enquanto a pílula verde consegue eliminar o agente de doenças de mesma coloração, a pílula vermelha não é eficaz em relação à interação com seu respectivo micróbio. 

Para entendermos o que de fato está ocorrendo, precisaremos dar uma olhada no conteúdo do script que gerencia a interação entre medicamentos e agentes de doenças.

Melhorias no código

Interrompa a simulação da execução, clicando novamente sobre o ícone do botão Play. Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique duas vezes sobre o ícone do script ComportamentoDoenca para visualizarmos seu conteúdo no Visual Studio. No momento, este é o código presente dentro do script implementado no projeto:

Inicialmente, como forma de testarmos a interação entre os medicamentos e os agentes de doenças, implementamos uma verificação simples dentro da estrutura da função OnTriggerEnter, responsável por eliminar o micróbio da cor verde caso sofresse colisão de um medicamento da cor verde. Porém, como agora temos uma variedade grande de agentes de saúde disponíveis em nosso game, é hora de codificarmos “pra valer” uma estrutura de decisão que suporte os variados tipos de medicamentos e de micróbios de nosso projeto.

Para tal, substitua o conteúdo que está presente dentro dos colchetes da função OnTriggerEnter pelo código descrito a seguir:

switch (other.tag)
{
    case "medicamentoVerde":
        if (isVerde) TratamentoCerto(other.gameObject); else TratamentoErrado(other.gameObject);
        break;

    case "medicamentoVermelho":
        if (isVermelho) TratamentoCerto(other.gameObject); else TratamentoErrado(other.gameObject);
        break;

    case "medicamentoAmarelo":
        if (isAmarelo) TratamentoCerto(other.gameObject); else TratamentoErrado(other.gameObject);
        break;

    case "medicamentoAzul":
        if (isAzul) TratamentoCerto(other.gameObject); else TratamentoErrado(other.gameObject);
        break;

    case "medicamentoRoxo":
        if (isRoxo) TratamentoCerto(other.gameObject); else TratamentoErrado(other.gameObject);
        break;
}

Utilizando a estrutura condicional switch, pudemos definir uma regra para cada “caso”: se um medicamento colidir com um agente de doenças da mesma cor que a sua, o jogo executará os códigos pertencentes à função TratamentoCerto; caso contrário, serão executados os códigos pertencentes à função TratamentoErrado.

Como o Visual Studio já denuncia (pelas tarjas vermelhas exibidas logo abaixo das palavras no código), precisamos agora inserir os códigos referentes às duas novas funções. Para isso, logo após o fechamento da chave pertencente à função OnTriggerEnter e antes do fechamento da última chave do script como um todo, insira o seguinte trecho de código:

public void TratamentoCerto(GameObject pilula)
{
    // Remover pílula do labirinto
    Destroy(pilula);

    // Remover agente de doenças do labirinto
    Destroy(gameObject);
}

public void TratamentoErrado(GameObject pilula)
{
    // Em breve
}    

A função TratamentoCerto será a responsável por realizar duas ações muito importantes toda vez que houver um “match” entre pílula e micróbio: remover de cena o agente de doenças que sofreu a colisão e, também, remover o medicamento, pois o mesmo já surtiu efeito. Este último era algo que ainda não havíamos realizado, nem mesmo na interação entre pílula e agente verdes.

Já a função TratamentoErrado, executada quando um medicamento colide com um microrganismo incorreto, terá seu código disponibilizado em um próximo encontro.

Salve o script e feche o Visual Studio. Retorne ao editor do Unity para realizarmos uma nova simulação de execução. Será que as interações entre pílulas e agentes de doenças serão diferentes dessa vez?

Agora sim! No momento em que a pílula verde encosta no agente verde, ambos os objetos desaparecem de cena; o mesmo ocorre agora também na interação entre os elementos de cor vermelha utilizados no teste.

Encerre a simulação da 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, opção Save) e o projeto (menu File, opção Save Project) antes de fechar o editor.

Próximos passos

Além de introduzirmos um “batalhão” de doenças coloridas em nosso projeto, conseguimos codificar de uma forma bem interessante as ações a serem executadas pelo game ao se concretizar a interação entre elementos de mesma cor dentro do labirinto.

Ainda faltam muitos detalhes, não apenas em relação à interação entre medicamentos e agentes incompatíveis entre si, mas também sobre as demais “consequências” de todas as interações junto às regras do game. Mesmo assim, podemos considerar que realizamos importantes avanços no desenvolvimento do núcleo de nosso game; portanto, lhe parabenizo por ter alcançado esta etapa!

Em nossos próximos encontros, daremos prosseguimento aos processos de implementação e configuração dos microrganismos, das pílulas e das interações entre ambos.

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

Revisão: Davi Sousa
Siga o Blast nas Redes Sociais
Rodrigo Garcia Pontes
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. Você pode compartilhar este conteúdo creditando o autor e veículo original (BY-SA 3.0).