Aprendendo a programar jogos em Unity: um médico muito feliz está pintando no cenário

Posicionaremos e configuraremos em cena a versão festiva de Doutor Tratanildo, que será apresentada em tela ao se vencer a aventura.

em 30/03/2025
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após concluirmos, em nosso encontro anterior, a configuração da funcionalidade de decréscimo de tempo restante para a conclusão dos tratamentos dos pacientes nas fases, realizaremos hoje a inserção no cenário de uma cópia adicional do modelo de Doutor Tratanildo, cuja exibição em tela ocorrerá somente ao se vencer a aventura, por meio da tela de vitória do game.

Caso você esteja acessando nossa série pela primeira vez, sinta-se especialmente convidado a juntar-se a nós nesta caminhada, repleta de interessantes conhecimentos e aprendizados sobre o universo de desenvolvimento de jogos.

Por meio do uso da plataforma Unity, estamos elaborando diferentes projetos práticos de programação, contemplando desde o processo de concepção dos jogos até a codificação de fato dos games.

A aventura que estamos elaborando no momento chama-se Consultório do Dr. Tratanildo; trata-se de um jogo ambientado em um consultório médico 3D cujo estilo de gameplay mescla referências de clássicos dos arcades e dos consoles, como Dr. Mario (Nintendo, 1990) e Pac-Man (Namco, 1980).


Não se acanhe caso não tenha conhecimentos técnicos prévios sobre programação de jogos ou de sistemas, pois esta série de textos é preparada justamente para que você possa tirar do papel aquele game que sempre sonhou em tornar realidade aprendendo desde os conceitos mais básicos do processo como um todo.

A partir do primeiro texto da série são abordados diferentes tópicos muito importantes, envolvendo desde a instalação e a configuração da ferramenta Unity em nossos computadores até a inserção, a configuração e a codificação de elementos visuais, sonoros, textuais e de lógica dos games.

Venha conosco para que possamos, juntos, seguir nesta trilha rumo a novos conhecimentos!

Mais um Doutor Tratanildo 

Por meio das intervenções que realizamos no projeto nos últimos encontros, temos hoje à disposição em nosso projeto um script controlador de fases que, em seu projeto estrutural, já contempla a previsão de que possamos interagir com diferentes elementos em cena, tais como os monstros, os obstáculos do labirinto, os pacientes no consultório e, também, cinco diferentes “doutores”, categorizados conforme a situação observada no momento:

Note que, dentre as cinco variáveis em destaque, já informamos ao script controlador apenas qual será o GameObject referente ao médico que caminha pelo cenário, por meio do atributo Doutor Cenario do componente ControllerFase atrelado a ControladorFase.

Em cena, posicionamos previamente apenas uma cópia do renomado médico no consultório; portanto, para que possamos configurar adequadamente mais comportamentos via script, seria interessante começarmos a introduzir no projeto as demais facetas de Tratanildo Doencita.

Embora a ambientação de nosso game seja, de certa forma, bem animada, com elementos coloridos e personagens carismáticos em cena, a temática em si do jogo tem um quê de sombriedade, pois trata de temas que são bem sérios na vida real, como as doenças e o bom uso de medicamentos.

Para tirarmos de foco um pouco essa “aura negativa” que a temática pode vir a trazer, em vez de iniciarmos as inserções pela versão do médico a ser apresentado em caso de derrotas, que tal começarmos configurando o modelo a ser exibido nos momentos em que o jogador vencer os desafios, ou seja, ao se curar todos os pacientes?

Vamos começar, então, 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 Assets, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene.

Primeiramente, vamos criar um grupo de GameObjects para organizar melhor a presença de tantos médicos em cena. Na aba Hierarchy, clique com o botão direito sobre o objeto Personagens e, no menu suspenso, selecione a opção Create Empty.

Conceda o nome “Doutores” ao novo GameObject, mantendo os valores-padrão para os atributos Position (X, Y e Z = 0), Rotation (X, Y e Z = 0) e Scale (X, Y e Z = 1) de seu componente Transform.

Em seguida, ainda na aba Hierarchy, selecione DoutorCenario e arraste-o em direção ao elemento Doutores, tornando-o um objeto subordinado ao GameObject recém-introduzido.


Com o grupo devidamente criado, na aba Project, abra as pastas Assets, Multimedia e, por fim, 3D. Selecione o ícone do arquivo que representa o modelo tridimensional do médico, de nome Doutor_rindo. Em seguida, clique e arraste o item em direção ao objeto Doutores, na aba Hierarchy.

O nome do novo GameObject criado deverá ser “DoutorVitoria”, assim como ilustrado pela imagem a seguir


Selecione DoutorVitoria e, na aba Inspector, modifique os valores dos parâmetros de seu componente Transform conforme segue:
  • Position X = -32, Y = 0, Z = -20;
  • Rotation X = 0, Y = 90, Z = 0;
  • Scale X, Y e Z = 100.
Note que o novo modelo tridimensional do médico foi posicionado logo atrás de uma das paredes do consultório, assim como fizemos com os elementos 3D do labirinto. Sua exibição no game será realizada por meio da interação entre uma câmera, a ser inserida em breve, e o componente de tipo Raw Image atrelado ao objeto ImagemDoutorFeliz, hierarquicamente subordinado a TelaVitoria.

Vamos configurar, agora, o comportamento “feliz” que o médico exibirá em cena nos momentos apropriados. Para isso, criaremos um novo controlador de animações a ser atrelado ao componente Animator de DoutorVitoria.

Diagrama cíclico de animações

Na aba Project, ainda com a pasta 3D em evidência, clique duas vezes sobre a subpasta Animacoes para abri-la. Em um espaço vazio da janela, clique com o botão direito do mouse e, no menu suspenso apresentado, selecione as opções Create e, em seguida, Animator Controller, conforme exemplificado a seguir:

Conceda o nome “animControllerDoutorFeliz” ao novo controlador de animações criado. Clique duas vezes sobre seu ícone para editarmos o fluxo de animações do controlador via aba Animator:

O comportamento esperado para a versão “festiva” de Doutor Tratanildo envolverá a repetição contínua das seguintes ações de forma sequencial:
  • O médico dará um salto com o punho erguido;
  • O médico baterá palmas olhando para o jogador.
As duas animações que comporão este comportamento estão armazenadas nos elementos de nome “animVitoria” e “animPalmas”, respectivamente, presentes dentro da pasta Animacoes.

Vamos iniciar a configuração do Animator Controller clicando e arrastando o ícone de animVitoria para dentro da janela da aba Animator:

O elemento em laranja, Victory Idle, representa a animação de animVitoria introduzida no fluxo de animações do controlador animControllerDoutorFeliz.

Vamos inserir, agora, a segunda animação, clicando e arrastando o ícone de animPalmas para dentro da janela da aba Animator:

Agora que já temos as duas animações, vamos realizar a ligação lógica entre elas.

Clique com o botão direito sobre Victory Idle e, no menu suspenso, selecione a opção Make Transition. Em seguida, clique sobre a caixa cinza (mixamo_com), que representa a animação de animPalmas. Note que uma seta branca surgiu, ligando as duas animações.

Repita a operação, desta vez clicando com o botão direito sobre o elemento mixamo_com, selecionando a opção Make Transition e, em seguida, clicando sobre Victory Idle. Teremos, agora, outra seta branca, fechando um ciclo entre as duas animações:

Dessa forma, as duas animações serão executadas de forma contínua, uma após a outra, como planejamos inicialmente.

Volte à aba Scene e, na aba Hierarchy, selecione o GameObject DoutorVitoria. Na aba Inspector, dentro da estrutura de seu componente Animator, altere o valor do atributo Controller para o item que representa o controlador de animações recém-configurado (animControllerDoutorFeliz).


Vamos dar uma olhadinha em como o novo modelo tridimensional do médico se comporta com o controlador de animações atrelado? Para tal, pressione o ícone do botão Play presente acima da aba Game e, em seguida, volte à aba Scene, posicionando sua visualização próxima ao objeto DoutorVitoria:

É muita alegria envolvida, não?! Interrompa a simulação da execução, clicando novamente sobre o ícone do botão Play, para prosseguirmos configurando elementos adicionais importantes para a correta exibição da nova versão do médico na tela.

Nova câmera

Vamos inserir, agora, uma nova câmera a ser atrelada ao GameObject do radiante doutor, permitindo a exibição de sua imagem em um espaço reservado da tela de vitória do game.

Na aba Hierarchy, clique com o botão direito sobre DoutorVitoria e, no menu suspenso, selecione a opção Camera.

Conceda o nome “CameraVitoria” ao novo GameObject e altere os valores dos atributos de seu componente Transform conforme segue:
  • Position X = 0, Y = 0.055, Z = 0.075;
  • Rotation X = 15, Y = 180, Z = 0;
  • Scale X, Y e Z = 1.
Da mesma forma que fizemos anteriormente para a exibição do labirinto na tela, iremos direcionar a imagem gerada pela nova câmera para uma textura (elemento Render Texture), esta que será utilizada como “fonte” para a exibição do doutor por um objeto da tela de vitória subordinada ao Canvas da cena.

Na aba Project, abra as pastas Assets, Multimedia e, por fim, TexturasCamera. Clique com o botão direito sobre uma área vazia da pasta e, no menu suspenso, selecione a opção Create e, em seguida, Render Texture.

O nome do arquivo de textura criado será “TexturaCameraDoutorFeliz”. Selecione-o e, na aba Inspector, modifique suas dimensões (parâmetro Size) para 650 x 850, conforme ilustrado a seguir:

Volte a selecionar o objeto CameraVitoria, subordinado a DoutorVitoria, via aba Hierarchy. Na aba Inspector, altere o valor do atributo Target Texture de seu componente Camera para a nova textura criada (TexturaCameraDoutorFeliz) e o valor do atributo Clear Flags para Solid Color.

Com as modificações realizadas, a textura receberá a imagem da câmera atrelada ao modelo feliz do médico, desconsiderando o fundo do cenário.

Na aba Hierarchy, selecione agora o objeto ImagemDoutorFeliz, subordinado a TelaVitoria que, por sua vez, encontra-se subordinado a Canvas. Na aba Inspector, altere o valor do atributo Texture de seu componente Raw Image para o elemento que representa a textura TexturaCameraDoutorFeliz.

Experimente ativar o GameObject TelaVitoria, via aba Inspector, e simular a execução do game, por meio do ícone do botão Play, para ver na prática o que criamos:

Interrompa a simulação da execução, clicando novamente no ícone do botão Play. Selecione DoutorVitoria e TelaVitoria, via aba Hierarchy, e deixe ambos os objetos desativados, via aba Inspector. Ambos os objetos serão ativados posteriormente por ação do script controlador da fase assim que o jogador vencer os desafios.

Por falar no script controlador, na aba Hierarchy selecione o GameObject ControladorFase e, na aba Inspector, altere o valor do atributo Doutor Felicidade de seu componente Controller Fase para o item que representa o objeto que introduzimos em cena no encontro de hoje (DoutorVitoria).

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

A união entre a codificação dos scripts e a configuração dos elementos visuais em cena está permitindo a nós elaborarmos interessantes e bonitas interações entre os jogadores e os elementos de nossa aventura. Não foi diferente hoje, ao elaborarmos um dos elementos a ser exibido no momento de maior felicidade do jogador, que é a proclamação de sua vitória.

Em nossos próximos encontros, daremos sequência ao processo de composição tanto das regras codificáveis via scripts controladores quanto dos elementos físicos visuais presentes em cena.

Nosso próximo encontro será no dia 6 de abril. Até mais! Fique sempre ligado 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 3.0).