Aprendendo a programar jogos em Unity: visualizando os medicamentos introduzidos no labirinto

Realizaremos intervenções em scripts para permitir ao jogador visualizar as pílulas concedidas aos pacientes.

em 19/10/2025
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após consolidarmos, no encontro anterior, o desenvolvimento do módulo de entrega de medicamentos aos pacientes em nosso game, realizaremos hoje intervenções em códigos dos scripts visando refinar a experiência do jogador durante o fornecimento das pílulas miraculosas.

Se hoje for a primeira vez que você teve a oportunidade de ler conteúdos de nossa série, considere-se especialmente convidado(a) a acompanhar-nos em uma jornada repleta de experimentos e aprendizados sobre o mundo do desenvolvimento de jogos digitais.

Elaborando diferentes projetos práticos de programação de games, aprenderemos um pouco mais sobre como a ferramenta Unity pode nos auxiliar a tirar do papel os jogos que sempre sonhamos em tornar realidade. A cada encontro, abordamos tópicos importantes do processo de desenvolvimento de projetos, tais como os queenvolvem a elaboração e configuração dos elementos multimídia e das regras de interação entre objetos presentes nas fases de um jogo.

No momento, estamos trabalhando no projeto do game Consultório do Dr. Tratanildo. Trata-se de um puzzle ambientado em um consultório médico 3D, cujas características de gameplay mesclam referências a clássicos dos anos 1980 e 1990, como Pac-Man (Namco, 1980) e Dr. Mario (Nintendo, 1990), e obras peculiares de antigas gerações dos consoles, como é o caso de Tama (Time Warner Interactive, 1994).


Caso você nunca tenha experimentado programar jogos ou sistemas, não se preocupe, pois nossa série é elaborada justamente pensando em quem quer aprender a criar jogos digitais, mas ainda não sabe bem ao certo por onde começar. A partir do primeiro texto da série, são abordadas desde as etapas iniciais do processo como um todo, como a instalação e a configuração da ferramenta em nossos computadores, até as etapas em que há a construção, de fato, dos elementos que fazem parte das aventuras que vamos criar.

Se você gostou da ideia de aprender a criar seus próprios jogos, aproveite a oportunidade para seguir, conosco, nesta jornada rumo a um universo de novos conhecimentos e de muita diversão!

De olho no tratamento

Apesar de sabermos que o novo módulo de concessão de medicamentos aos pacientes funciona de forma satisfatória, seria bem interessante permitir ao jogador poder observar as pílulas surgindo no labirinto assim que forem concedidas ao paciente.

Para tal ação, vamos realizar modificações nos scripts controladores das fases e da barra inferior, visando reaproveitar o código que permite a exibição temporária do labirinto assim que o paciente se dirige ao leito do consultório.

Iniciaremos nossas intervenções de hoje abrindo 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 duas vezes sobre o ícone que representa o script ControllerFase, para que possamos iniciar sua edição no Visual Studio.

Começaremos as intervenções no script introduzindo o seguinte bloco de códigos imediatamente antes do último fechamento de chaves do arquivo:

    public void MostrarLabirintoTemporariamente(int segundos, bool ehNovoTratamento)
    {
        StartCoroutine(MostrarLabirintoPacientes(segundos, ehNovoTratamento));
    }

    private IEnumerator MostrarLabirintoPacientes(int segundos, bool ehNovoTratamento)
    {
        pacienteCenario.SetActive(false);
        
        if (ehNovoTratamento)
            doutorConversa.SetActive(false);
        else
            doutorCenario.SetActive(false);

        pacienteNoLeito.SetActive(true);
        camPacienteIndoAoLeito.gameObject.SetActive(false);

        foreach (Camera camTratamento in camerasTratamento)
            camTratamento.gameObject.SetActive(true);
        controladorLabirinto.gameObject.SetActive(true);
        visualizacaoLabirinto.SetActive(true);

        yield return new WaitForSeconds(segundos);
        TransicaoParaTratamento(ehNovoTratamento);
    }

A introdução da função MostrarLabirintoTemporariamente permitirá que outros scripts possam, também, realizar solicitações ao controlador de fases para que seja exibida a imagem do labirinto por uma determinada quantidade de segundos na tela. Essa exibição temporária será realizada por meio da Coroutine MostrarLabirintoPacientes, cujo conteúdo se assemelha muito com o código presente atualmente dentro do script, ao final da Coroutine caminhadaPacienteLeito.

Duas melhorias implementadas na nova Coroutine, em comparação ao código pré-existente no script, são referentes ao controle da quantidade de segundos a ser exibido o labirinto na tela e o controle de qual GameObject representante de Doutor Tratanildo deverá ser desabilitado temporariamente, por meio da análise do valor do parâmetro ehNovoTratamento.

Em relação à última melhoria indicada, sua implementação permitirá a substituição do trecho de código presente em caminhadaPacienteLeito por uma chamada simples a MostrarLabirintoTemporariamente. É importante buscarmos sempre deixar nossos scripts mais enxutos, evitando redundâncias, para que, caso surja a necessidade de se realizar manutenções nos códigos de nossos jogos, não tenhamos que perder muito tempo encontrando “cópias” de funções espalhadas pelos arquivos.

Ainda no script ControllerFase, dentro da Coroutine caminhadaPacienteLeito, realize a substituição do bloco de código responsável por mostrar o paciente e o labirinto na tela por três segundos pelas linhas a seguir:

        // Mostrar o paciente no leito e suas doenças por 3 segundos
        MostrarLabirintoTemporariamente(3,true);

Ajustes finos

A última alteração que iremos realizar hoje em ControllerFase refere-se ao método TransicaoParaTratamento, que receberá intervenções visando permitir a concessão do valor inicial de tempoRestante para a fase corrente apenas ao se tratar do momento inicial de tratamento.

Para tal, vamos modificar a seguinte linha de código da função:
  • De:
    public void TransicaoParaTratamento()
  • Para:
    public void TransicaoParaTratamento(bool ehNovoTratamento)
Além disso, realize a seguinte adição ao corpo do texto:
  • Antes de:
    tempoRestante = TempoMaxTratamento[faseCorrente];
  • Adicione:
    if (ehNovoTratamento)
A imagem a seguir sintetiza as intervenções realizadas:

Salve o script e minimize o Visual Studio. Retorne ao editor do Unity e, na aba Project, ainda com a pasta Scripts em evidência, clique duas vezes sobre o ícone que representa o script ControllerBarraInferior.

Na parte final do conteúdo da função Update(), dentro da estrutura responsável pelos comandos a serem realizados ao se conceder pílulas ao paciente, realize a seguinte intervenção:
  • Logo após: controladorFase.controladorLabirinto.InserirPilulas(pilulaAConceder_1, pilulaAConceder_2);
  • Adicione:
    controladorFase.MostrarLabirintoTemporariamente(2, false);

Com essa alteração pontual, informaremos ao game que, ao se conceder pílulas ao paciente, o labirinto e o paciente deverão ser exibidos durante dois segundos em tela, devolvendo o controle do game ao jogador logo após esse período.

Salve o script e feche o Visual Studio. Retorne ao editor do Unity e experimente realizar uma simulação de execução do jogo, indo à aba Game e clicando sobre o ícone do botão Play:

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

Por meio de intervenções em scripts, realizamos a construção de mais uma funcionalidade interessante dentro do processo de concessão de medicamentos aos pacientes no consultório.

É curioso pensar que, agora que temos uma estrutura-base do projeto bem definida, conseguimos implementar determinadas funcionalidades de forma completa dentro do projeto utilizando apenas um ou dois encontros, o que demonstra quão grande está sendo nosso progresso enquanto desenvolvedores de jogos. Parabéns por continuar avançando nesta trilha conosco!

Em nosso próximo encontro, iniciaremos o desenvolvimento de funcionalidades relacionadas ao módulo de controle do labirinto.

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).