Aprendendo a programar jogos em Unity: codificando ajustes ao módulo de concessão de medicamentos

Daremos sequência ao processo de criação de um dos principais módulos controladores do game.

em 12/10/2025
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após iniciarmos, no encontro anterior, edições em scripts controladores envolvidos no processo de entrega de medicamentos, prosseguiremos hoje aplicando intervenções em scripts e em atributos de componentes de GameObjects para que seja possível a concessão das pílulas miraculosas aos pacientes acamados de Tratanildo Doencita.

Se esta for a primeira vez que você tem contato com conteúdos de nossa série, sinta-se especialmente convidado(a) a juntar-se a nós em uma interessante trilha, repleta de novos conhecimentos e aprendizados sobre o mundo do desenvolvimento de jogos digitais.

Por meio da elaboração de projetos práticos, aprenderemos sobre como a ferramenta Unity pode nos auxiliar no processo de criação de games dos mais variados tipos. Tópicos importantes, como os que envolvem a elaboração de fases, o posicionamento de elementos gráficos e de objetos, e a codificação de comportamentos e regras dos diferentes entes presentes em um jogo são abordados de forma dinâmica, permitindo que, posteriormente, você possa adaptar os conceitos para a criação de suas próprias aventuras virtuais.

No momento, estamos elaborando o game Consultório do Dr. Tratanildo. Trata-se de um jogo ambientado em um consultório médico tridimensional, cujas características de gameplay elaboradas prestam homenagem a títulos 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 teve oportunidades prévias de aprender um pouco sobre programação de jogos ou de sistemas em geral, pois nossa série é elaborada justamente para auxiliar quem tem vontade de tirar do papel seu “game dos sonhos”, mas que ainda não sabe nem por onde começar. A partir do primeiro texto da série, são abordados desde os passos mais elementares do processo, como a instalação e a configuração da ferramenta Unity em nossos computadores, até etapas consideradas mais desafiadoras, como as que envolvem codificação de comandos em scripts controladores de comportamentos.

Está feito o convite: se você gostou da ideia de criar seus próprios jogos, venha conosco para que possamos, juntos, desvendarmos esse universo repleto de conteúdos interessantes e de muita diversão!

Um script para a concessão de pílulas

Depois de nos dedicarmos a realizar modificações nos scripts da barra inferior do Canvas e da montagem do labirinto, vamos elaborar códigos para um novo controlador que será responsável pelos fluxos de interação entre o jogador e o módulo responsável pela concessão de pílulas aos pacientes. Esse novo script atuará assim que o médico chegar ao local designado no cenário para entrega dos medicamentos e, na prática, atuará de forma semelhante ao PegaPilula.

Para iniciarmos sua construção, 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 AssetsScenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene.

Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique com o botão direito sobre uma área vazia da janela e, no menu suspenso, selecione a opção Create e, em seguida, C# Script. Nomeie o novo script como “ConcedePilula”, assim como ilustrado pela imagem a seguir, e clique duas vezes sobre seu ícone, para iniciarmos sua edição no Visual Studio.

De forma análoga à abordagem adotada em PegaPilula, o novo script será acionado assim que o médico posicionar-se na área destinada para entrega dos medicamentos, sendo a detecção de sua presença realizada por intermédio de uma função OnTriggerEnter.

O primeiro passo de sua construção envolverá a remoção de funções que não serão utilizadas e, em seguida, a declaração de algumas variáveis importantes.

No corpo do script recém-criado, remova as declarações das funções void Start() e void Update(), deixando em seu lugar as seguintes linhas de código:

    public ControllerBarraInferior barraInferior;
    public Transform grupoPilulasMaoEsquerda, grupoPilulasMaoDireita;
    internal string nomePilulaDir, nomePilulaEsq;

Logo após a declaração das variáveis, antes do último fechamento de chaves do arquivo, introduza o seguinte bloco de comandos:

    private void OnTriggerEnter(Collider other)
    {
        if (other.name == "DoutorCenario" && Geral.ModoDeJogoCorrente == "BuscaMedicamentos")
        {
            // Variáveis de controle para verificar se o doutor já está segurando pílulas em suas mãos
            bool temPilulaMaoDir = false;
            bool temPilulaMaoEsq = false;
            nomePilulaDir = "N/A";
            nomePilulaEsq = "N/A";

            // Verificação de presença de pílula na mão direita do médico
            for (int i = 0; i < grupoPilulasMaoDireita.childCount; i++)
                if (grupoPilulasMaoDireita.GetChild(i).gameObject.activeSelf)
                {
                    temPilulaMaoDir = true;
                    nomePilulaDir = grupoPilulasMaoDireita.GetChild(i).name;
                }

            // Verificação de presença de pílula na mão esquerda do médico
            for (int i = 0; i < grupoPilulasMaoEsquerda.childCount; i++)
                if (grupoPilulasMaoEsquerda.GetChild(i).gameObject.activeSelf)
                {
                    temPilulaMaoEsq = true;
                    nomePilulaEsq = grupoPilulasMaoEsquerda.GetChild(i).name;
                }

            //   Se tiver pílulas nas mãos
            //   - Opção a ser exibida: Conceder pílula
            //   Se não tiver:
            //   -  Não exibir barra de opções

            if (temPilulaMaoDir || temPilulaMaoEsq)
            {
                barraInferior.TextoTeclaOpcao.text = "X";
                barraInferior.pilulaAConceder_1 = nomePilulaDir;
                barraInferior.pilulaAConceder_2 = nomePilulaEsq;
                barraInferior.TextoBarraInferior.text = "Conceder pílula(s)";
                barraInferior.gameObject.SetActive(true);
            }
            else barraInferior.gameObject.SetActive(false);

        }
    }

O método OnTriggerEnter concentra a maior parte das ações que serão realizadas pelo script. Ele será responsável pelas seguintes ações:
  • Verificar se, de fato, foi Tratanildo Doencita quem adentrou no espaço delimitado no cenário para a entrega das pílulas durante a etapa de busca de medicamentos da fase;
  • Avaliar quais são as pílulas que o médico carrega em suas mãos, atualizando o valor de nomePilulaDir e nomePilulaEsq com os valores correspondentes aos tipos desses medicamentos;
  • Caso o médico carregue ao menos uma pílula consigo, a função exibirá a barra inferior do Canvas em tela, contendo indicativos para que o jogador possa conceder a(s) pílula(s) ao paciente por intermédio do pressionamento da tecla “X” de seu teclado.
Uma curiosidade sobre as ações tomadas é que, durante a execução dos comandos de OnTriggerEnter, é realizada a concessão do valor “N/A” às variáveis pilulaAConceder_1 e pilulaAConceder_2, variáveis essas que codificamos no script controlador da barra inferior durante nosso encontro anterior.

Logo após o bloco de comandos recém-introduzido, antes do fechamento final de chaves do conteúdo do script, inclua as seguintes linhas de código:

    private void OnTriggerExit(Collider other)
    {
        if (other.name == "DoutorCenario")
        {
            barraInferior.gameObject.SetActive(false);
        }
    }

Por meio da ação de OnTriggerExit, ocorrerá a desabilitação da barra inferior do Canvas assim que Tratanildo se afastar da região designada no cenário do consultório.

Note também que, nesse caso em específico, não houve a necessidade de se apagar os valores de determinadas variáveis antes de desabilitar a barra inferior. Isso deve-se ao fato de que a administração de medicamentos aos pacientes só ocorre quando o jogador pressionar o botão indicado pela barra inferior naquela posição específica do cenário e, durante o momento em que OnTriggerEnter é acionado, os valores das variáveis são atualizados para a real condição daquele instante, recebendo strings que contêm o tipo das pílulas presentes em cada mão do médico. 

Salve o script e feche o Visual Studio, retornando ao editor do Unity para que possamos realizar ajustes diretamente sobre alguns GameObjects da cena.

Introduzindo um novo componente

De volta ao editor do Unity, na aba Hierarchy, selecione o objeto AreaEntregaPilulas, subordinado a CenarioFixo. Na aba Inspector, por intermédio do botão Add Componente, insira um novo componente do tipo Concede Pilula.

Conceda os seguintes valores aos respectivos atributos do novo componente atrelado a AreaEntregaPilulas, lembrando-se de que, ao abrir a janela de seleção de valores, escolher a aba Scene para que os objetos a serem selecionados sejam exibidos:
  • Barra Inferior: selecione o GameObject de nome BarraInferiorInfo;
  • Grupo Pilulas Mao Esquerda: indique o objeto de nome ContainerCapsulaEsq;
  • Grupo Pilulas Mao Direita: será indicado o GameObject ContainerCapsulaDir.
Por fim, na aba Hierarchy, selecione o objeto ControladorFase. Para informarmos ao jogo quais serão as posições em que as pílulas deverão surgir no labirinto, via aba Inspector, altere o tamanho do vetor Posicao Inicial Pilulas para 2, preenchendo com os seguintes valores de teste os campos correspondentes a seus elementos internos:
  • Element 0: X = 0, Y = 0;
  • Element 1= 2, Y = 2.
Após tantas sessões de codificação em nossos scripts controladores, é hora de experimentarmos o game para que possamos ver, na prática, os frutos de nossas intervenções. Para tal, vá à aba Game e clique sobre o ícone do botão Play:

Note que, após acionado o recurso para concessão dos medicamentos, as duas pílulas somem das mãos do médico. De fato, elas foram parar no labirinto, mas, com a configuração atual, não conseguimos perceber bem o que ocorre.

Observe o que ocorre no labirinto a partir da simulação gravada a seguir, contando com a visualização simultânea da imagem do jogo (aba Game) e do conteúdo do cenário (aba Scene):

Em relação a essa simulação, podemos notar muitos acontecimentos interessantes ocorrendo durante a execução do jogo.

O desafio referente ao primeiro paciente consiste em tratar três agentes de doenças de cor vermelha. Ao se fornecer uma pílula de cor vermelha e outra de cor amarela ao paciente, pelo fato de as coordenadas de entrada das pílulas serem próximas ao centro do labirinto e por, naquela região, termos um dos agentes posicionados, a pílula vermelha já reage com a doença logo ao ser instanciada, destruindo o monstrinho.

Após a primeira intervenção, ao introduzirmos no tratamento mais uma pílula amarela, desta vez em conjunto com uma azul, as três pílulas acabam colidindo por estarem muito próximas entre si.

De fato, o comportamento que buscávamos já está ocorrendo de forma satisfatória, mas ainda resta realizar diversos ajustes; por exemplo, envolvendo as interações físicas entre as pílulas.

Interrompa a simulaçã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 do Unity.

Próximos passos

Conseguimos ver, na prática, mais um módulo de interação de nosso game funcionando de forma satisfatória. Conforme dito anteriormente, ainda precisamos realizar importantes ajustes em scripts e no próprio editor do Unity, mas, desde já, lhe parabenizo por ter avançado mais uma etapa em nosso projeto.

Em nossos próximos encontros, continuaremos a realizar ajustes necessários ao projeto, além de iniciarmos a codificação de comportamentos dinâmicos para os agentes de doenças e de outros elementos que irão enriquecer nossa aventura.

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

Revisão: Ives Boitano
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 4.0).