Aprendendo a programar jogos em Unity: iniciando a construção dos desafios finais

Configuraremos dois novos pacientes no projeto e realizaremos ajustes pontuais em módulos do game.

em 20/09/2026
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Depois de aplicarmos, em nosso encontro anterior, uma bateria de ajustes a diferentes módulos de nosso game, iniciaremos hoje a etapa final de configuração dos desafios, de seus labirintos e agentes de doenças, por meio de intervenções nos parâmetros de nosso projeto.

Se esta é a primeira vez que você lê conteúdos de nossa série, aproveite a oportunidade para conhecer mais sobre o processo de desenvolvimento de jogos digitais, colocando a mão na massa e tirando do papel jogos de diferentes estilos gráficos e de gameplay.

Por meio do uso da ferramenta Unity, estamos desenvolvendo projetos práticos de programação de games. A cada encontro, experimentamos diferentes métodos, técnicas e procedimentos aplicados às mais distintas etapas do processo de criação de uma aventura digital.

A partir do primeiro tópico da série, abordamos desde os passos que envolvem a instalação e a configuração da plataforma Unity em nossos computadores até a construção e a configuração, de fato, dos elementos que formam os desafios de um game: fases, cenários, personagens, regras e interações.

Os projetos práticos que elaboramos para abordar conceitos de programação de jogos nos permitem observar e experimentar elementos úteis ao processo de criação de games de diferentes estilos. Mesmo se você não teve experiências prévias de programação de jogos ou de sistemas, é possível tirar do papel aquele game que sempre sonhou em tornar realidade: nesta série, as etapas de programação e de configuração dos elementos nos projetos são sempre acompanhadas de exemplos e de explicações sobre os conceitos abordados.

Até o momento, já concluímos a produção de dois games 2D: Forest Ping Pong, inspirado no clássico Pong (Atari, 1972), e Motorista da Pesada, um platformer cujos aspectos de gameplay se assemelham aos do arcade japonês City Connection (Jaleco, 1985). Atualmente, estamos elaborando o game Consultório do Dr. Tratanildo, um puzzle ambientado em um consultório médico 3D, com inspirações em conceitos de gameplay de jogos dos anos 1980 e 1990, como Dr. Mario (Nintendo, 1990), Pac-Man (Namco, 1980) e Tama (Time Warner Interactive, 1994). 


Vale muito a pena acompanhar os passos de elaboração dos três games, por meio dos textos destacados no índice da primeira entrada da série. Inclusive, é possível experimentar os dois primeiros títulos diretamente de seu navegador, por meio de links nos últimos textos de cada projeto.

Se você tem vontade de aprender a criar suas próprias aventuras virtuais, “aperte os cintos” e junte-se a nós em uma jornada repleta de novos conhecimentos e de muita diversão!

Corações e melodias

Em comparação aos dois primeiros jogos que criamos, Consultório do Dr. Tratanildo é um game de construção bem mais complexa. É natural que, diante da quantidade de elementos do projeto, acabemos por encontrar algumas “pontas soltas” no projeto durante a execução de sessões de testes.

Duas dessas “pontas soltas” referem-se ao uso de sons para vitórias e derrotas no jogo, que idealizamos, mas acabamos por não implementar; e ao coração 2D indicativo do leito do paciente, cuja visualização mantém-se ativa, mesmo em momentos em que não seria necessário tê-lo à vista (como nas cutscenes entre paciente e médico).

Antes de introduzirmos a primeira leva de configurações dos desafios finais do game, vamos ajustar esses pequenos tópicos, por meio de intervenções no script controlador de fases e em campos de componentes de GameObjects de nosso projeto.

Vamos abrir o 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 Unity, na aba Project, abra a pasta Assets e, em seguida, Scenes. Clique duas vezes sobre o ícone da cena ConsultorioScene para iniciarmos as intervenções.

Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique duas vezes sobre o ícone do script ControllerFase para iniciarmos sua edição no Visual Studio.

Na seção de declaração de variáveis, localize o bloco de códigos referente aos elementos de cena (Canvas + Laboratório). Altere a linha em que são declarados os GameObjects pacienteCenario e pacienteNoLeito pelo conteúdo a seguir:

    public GameObject pacienteCenario, pacienteNoLeito, coracaoLeito;

A variável coracaoLeito será responsável por referenciar o elemento no laboratório que contém o coração 2D giratório. Codificaremos um comando para que ele seja exibido apenas após a cutscene entre paciente e médico.

Localize o método AtenderPaciente e, ao final do bloco de comandos de ativações e desativações, acrescente a linha de comandos a seguir:

        coracaoLeito.SetActive(false);

Em seguida, localize a função TransicaoParaTratamento. Imediatamente antes do comando referente à reativação de barraInfoAcoes, acrescente a linha de comandos a seguir:

        coracaoLeito.SetActive(true);

Com as intervenções realizadas, o coração cenográfico será exibido somente durante a etapa de busca de medicamentos pelo cenário.

Ainda com o script ControllerFase aberto para edição, vamos introduzir comandos para que sejam executados determinados sons ao se vencer ou perder um desafio no game.

Localize a Coroutine pacienteCurado e, dentro de suas chaves, procure pelas linhas responsáveis pela reexibição da seta do mouse, próximas ao final da Coroutine. Introduza imediatamente antes dessas linhas o seguinte bloco de comandos:

        // Executa efeito sonoro de vitória
        somVitoria.Play();

Com a inserção do comando, a cada vez que o tratamento de um paciente se encerrar, um som comemorativo tocará, indicando que o paciente concluiu o desafio.

Em seguida, localize a função Update. Dentro do bloco de comandos a serem executados ao se esgotar o tempo disponível para tratamento (tempoRestante < 0), também imediatamente antes do comando responsável pela reexibição da seta do mouse, introduza a seguinte linha de código:

                somDerrota.Play();

Salve o script e feche o Visual Studio. Vamos retornar ao editor do Unity para prosseguirmos com as edições.

Localize, na aba Hierarchy, o objeto AudioAdmin e expanda a listagem dos elementos subordinados ao GameObject. Note que ainda não temos objetos que fazem referência aos áudios a serem tocados em caso de vitória ou de derrota no game. Precisaremos criá-los e, para economizarmos tempo, vamos utilizar como base o objeto EfeitoSonoro_01, visto que ele tem os mesmos parâmetros configurados para o componente Audio Source que desejamos para os novos objetos (Loop, Play On Awake, Volume etc.).

Clique com o botão direito sobre EfeitoSonoro_01 e selecione a opção Duplicate. Repita a operação, para que tenhamos à disposição duas cópias do GameObject. Em seguida, renomeie uma das cópias para “EfeitoSonoro_Vitoria” e a outra para “EfeitoSonoro_Derrota”.


Selecione EfeitoSonoro_Vitoria e, na aba Inspector, localize o atributo AudioClip de seu componente Audio Source. Conceda ao campo o valor correspondente ao áudio de nome “vitoria”, conforme ilustrado a seguir.


Em seguida, selecione EfeitoSonoro_Derrota. Na aba Inspector, localize o atributo AudioClip de seu componente Audio Source. Conceda ao campo o valor correspondente ao áudio de nome “derrota”.


Na aba Hierarchy, selecione o objeto ControladorFase. Via aba Inspector, conceda os seguintes valores aos atributos de seu componente Controller Fase:
  • Coracao Leito: aponte o objeto AreaEntregaPilulas;
  • Som Vitoria: indique o objeto EfeitoSonoro_Vitoria;
  • Som Derrota: indique o objeto EfeitoSonoro_Derrota.
Por fim, na aba Hierarchy, selecione o objeto AreaEntregaPilulas, subordinado a CenarioFixo, e desative o GameObject, por meio da caixa de seleção da aba Inspector, ao lado de seu nome. Dessa forma, o objeto desde o princípio estará desativado, sendo exibido apenas após a cutscene entre paciente e médico. 

Feitas as alterações, vamos começar a configurar os desafios relacionados aos novos pacientes que chegarão ao consultório, sedentos por tratamentos médicos virtuais.

New sick kids on the block

Até o momento, temos três pacientes devidamente cadastrados, com seus respectivos labirintos configurados e agentes de doenças posicionados:
  1. O glorioso paciente do casaco vermelho, que apresenta problemas intestinais graves há dias.


  2. A inesquecível paciente da camiseta roxa, que sofre de problemas pulmonares constantes.


  3. O inoxidável paciente bigodudo, cuja amnésia consome suas memórias há tempos.


Como já realizamos inúmeros testes e validações com os três pacientes, seus labirintos e agentes de doenças, é justo mantê-los, na versão definitiva do game, como sendo os três primeiros desafios a serem enfrentados pelo jogador.

Os labirintos de cada um dos três primeiros pacientes envolveram o uso de pílulas de saúde das cores vermelha, amarela e roxa para a realização dos tratamentos. Para darmos sequência à elaboração dos desafios, vamos configurar hoje mais dois pacientes no game, a serem tratados com pílulas das cores verde e azul.

O mais novo “doente do pedaço” será um jovem que apresenta dores estranhas, abrangendo as duas extremidades laterais de seu abdômen.

Tratanildo, esperto como é, já identificará que se trata de um caso remediável por meio da entrega de pílulas verdes ao paciente. O labirinto que representa o interior do paciente ilustra o porquê das dores nas laterais do corpo do enfermo.

Será necessário configurarmos quatro agentes de doenças verdes para o paciente, além de nove obstáculos físicos no labirinto, para formarmos a estrutura da imagem.

Já o quinto enfermo de nossa aventura é um rapaz um tanto quanto “emocionado”: sofrendo de paixão, suas dores se concentram em seu coração; e nada melhor que uma boa dose de pílulas azuis administrada por Tratanildo Doencita para abrandar essa chama dolorosa e ardente em seu interior.

O interior de seu corpo é representado por um labirinto que, dentre outros elementos, apresenta uma formação que remete ao desenho de um coração, infestado de agentes de doenças azuis.

A construção desse labirinto envolve a configuração de três monstrinhos azuis e de onze obstáculos, nos parâmetros do projeto.

Para que essa turma entre em cena, na aba Hierarchy, clique sobre o objeto ControladorFase. Via aba Inspector, vamos realizar as seguintes intervenções em atributos de seu componente ControllerFase:
  • Tipo Paciente: amplie o tamanho do vetor para 5.
    • Element 3: conceda o valor 0;
    • Element 4: conceda o valor 2.
Esses valores correspondem aos itens presentes em Estilos Visuais Pacientes, cujas representações serão adotadas pelos novos pacientes (skin_adventurer e skin_manAlternative).
  • Fala Paciente: amplie o tamanho do vetor para 5.
    • Element 3: conceda o seguinte texto, sem as aspas:
      “Olá, doutor. Estou sofrendo com dores constantes nas duas laterais de meu abdômen. Será que o senhor consegue me sarar?”
    • Element 4: conceda o seguinte texto, sem as aspas:
      “Querido doutor, já não sinto mais meu coração bater como antigamente... Será que é por causa de paixão ou estou doente de verdade?”
  • Fala Doutor: amplie o tamanho do vetor para 5.
    • Element 3: conceda o seguinte texto, sem as aspas:
      “Vou precisar examiná-lo primeiro, mas creio que a sua doença não resistirá a uma boa dose de pílulas verdes.”
    • Element 4: conceda o seguinte texto, sem as aspas:
      “Não sou cupido, jovem, mas vou te examinar. Uma boa dose de pílulas azuis sempre ajuda a sarar um coração machucado.”
  • Fala Final: amplie o tamanho do vetor para 5.
    • Element 3: conceda o seguinte texto, sem as aspas:
      “As pílulas miraculosas que o senhor administrou resolveram meu problema. Muito obrigado!”
    • Element 4: conceda o seguinte texto, sem as aspas:
      “A vida é bela novamente! Meu coração bate mais forte do que nunca! Obrigado, doutor!”
  • Tempo Max Tratamento: amplie o tamanho do vetor para 5.
    • Element 3 e Element 4: conceda o valor 150 a ambos.
  • Posicao Monstros Azuis: amplie o tamanho do vetor para 3.
    • Element 0: X = 3, Y = -3, Z = 4;
    • Element 1: X = 3, Y = -7, Z = 4;
    • Element 2: X = 1, Y = -5, Z = 4.
  • Posicao Monstros Verdes: amplie o tamanho do vetor para 4.
    • Element 0: X = -3, Y = 7, Z = 3;
    • Element 1: X = 0, Y = 7, Z = 3;
    • Element 2: X = -3, Y = -7, Z = 3;
    • Element 3: X = 0, Y = -7, Z = 3.
Ambos os pacientes apresentarão um tempo menor para tratamento, em comparação aos demais já configurados. Também é interessante lembrar que, para Posicao Monstros Azuis e Posicao Monstros Verdes, o valor de Z refere-se ao paciente; por isso, todos os monstros azuis configurados até o momento apresentam valor igual a 4 (quinto paciente); e os verdes, valor igual a 3 (quarto paciente).
  • Posicao Obstaculos: amplie o tamanho do vetor para 31 (11 preexistentes + 9 para o labirinto do quarto paciente + 11 para o labirinto do quinto paciente).
    • Element 11: X = -5, Y = -7, Z = 3;
    • Element 12: X = 5, Y = -7, Z = 3;
    • Element 13: X = -5, Y = 7, Z = 3;
    • Element 14: X = 5, Y = 7, Z = 3;
    • Element 15: X = 3.5, Y = 4, Z = 3;
    • Element 16: X = -3.5, Y = 4, Z = 3;
    • Element 17: X = 3.5, Y = -4, Z = 3;
    • Element 18: X = -3.5, Y = -4, Z = 3;
    • Element 19: X = 0, Y = 0, Z = 3;
    • Element 20: X = 5, Y = -3, Z = 4;
    • Element 21: X = 5, Y = -7, Z = 4;
    • Element 22: X = 4, Y = -5, Z = 4;
    • Element 23: X = 3, Y = -1, Z = 4;
    • Element 24: X = 3, Y = -9, Z = 4;
    • Element 25: X = 0.5, Y = -2, Z = 4;
    • Element 26: X = 0.5, Y = -8, Z = 4;
    • Element 27: X = -1, Y = -3.5, Z = 4;
    • Element 28: X = -3.5, Y = -4, Z = 4;
    • Element 29: X = -5, Y = 2.5, Z = 4;
    • Element 30: X = 2, Y = 7, Z = 4.

  • Dimensao Obstaculos: amplie o tamanho do vetor para 31 (11 preexistentes + 9 para o labirinto do quarto paciente + 11 para o labirinto do quinto paciente).
    • Element 11: X = 1, Y = 5, Z = 3;
    • Element 12: X = 1, Y = 5, Z = 3;
    • Element 13: X = 1, Y = 5, Z = 3;
    • Element 14: X = 1, Y = 5, Z = 3;
    • Element 15: X = 4, Y = 1, Z = 3;
    • Element 16: X = 4, Y = 1, Z = 3;
    • Element 17: X = 4, Y = 1, Z = 3;
    • Element 18: X = 4, Y = 1, Z = 3;
    • Element 19: X = 10, Y = 1, Z = 3;
    • Element 20: X = 1, Y = 3, Z = 4;
    • Element 21: X = 1, Y = 3, Z = 4;
    • Element 22: X = 1, Y = 1, Z = 4;
    • Element 23: X = 3, Y = 1, Z = 4;
    • Element 24: X = 3, Y = 1, Z = 4;
    • Element 25: X = 2, Y = 1, Z = 4;
    • Element 26: X = 2, Y = 1, Z = 4;
    • Element 27: X = 1, Y = 2, Z = 4;
    • Element 28: X = 4, Y = 1, Z = 4;
    • Element 29: X = 4, Y = 4, Z = 4;
    • Element 30: X = 2, Y = 5, Z = 4.

Feitas as inserções dos valores, experimente testar o game, indo à aba Game e clicando sobre o ícone do botão Play. Experimente observar como se comportam os novos personagens, além da efetivação das demais alterações que realizamos hoje no projeto.

Ao final dos testes, interrompa a execução do jogo, clicando novamente no ícone do botão Play e retornando à aba Scene. Não se esqueça de salvar a cena (menu File, Save) e o projeto (menu File, Save Project) antes de fechar o Unity.

Próximos passos

Enfim, entramos na reta final da construção de Consultório do Dr. Tratanildo. Ao introduzirmos novos pacientes à aventura, evoluímos nosso jogo de forma consistente, deixando-o mais próximo de sua versão definitiva.

Em nossos próximos encontros, concluiremos a configuração dos demais pacientes e realizaremos os derradeiros ajustes no projeto para, de fato, finalizarmos a construção desse divertido jogo.

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