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 pertencem aos desafios propostos em um game: fases, cenários, personagens, regras e interações entre elementos.

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: nessa 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). Atualmnente, 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 presentes nos últimos textos relacionados a seus projetos.

Se você tem a 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, 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 segunte 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, devido a ter 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 à mão duas cópias do GameObject. Em seguida, renomeie uma das cópias para “EfeitoSonoro_Vitoria” e o outro 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 sicks 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 da blusa vermelha, que apresenta problemas intestinais graves há dias:


  2. A inesquecível paciente da camisa 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 resolvível por meio da concessão de pílulas verdes ao paciente. O labirinto que representa o interior do paciente ilustra o por quê 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 do 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, dentro 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 da 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 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 com valor igual a 3 (quarto paciente).
  • Posicao Obstaculos: amplie o tamanho do vetor para 31 (11 pré-existentes + 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 pré-existentes + 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 sobre o í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 nosso próximo encontro, concluiremos a configuração dos demais pacientes e realizaremos os derradeiros ajustes no projeto para, de fato, finalizarmos a construção desse divertido jogo.

Nos encontraremos novamente no próximo dia 27 de setembro. Até mais! Fique ligado sempre nas novidades do 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).