Aprendendo a programar jogos em Unity: os “primeiros passos” do médico em seu consultório

Aplicaremos os conceitos desenvolvidos até o momento ao objeto que representa o médico, permitindo seu controle no cenário.

em 27/10/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Depois de retomarmos a prática de programação de scripts para nosso projeto e, assim, conseguirmos conceder ao jogador em nosso encontro anterior o controle da movimentação do paciente pelo cenário, iremos aplicar os conhecimentos que desenvolvemos ao GameObject que representa o verdadeiro dono desse consultório maluco: Tratanildo Doencita, o personagem principal do game Consultório do Dr. Tratanildo.

Caso hoje seja a primeira vez que você teve contato com o conteúdo de nossa série, não se sinta acanhado: a partir do primeiro texto, você terá a possibilidade de desenvolver interessantes conhecimentos sobre desenvolvimento de games, independentemente de ter tido ou não alguma experiência prévia nessa área.

Abordamos desde tópicos mais introdutórios, como, por exemplo, a instalação da ferramenta Unity em nossos computadores, até conceitos mais avançados, como o desenvolvimento de cenários, posicionamento de elementos e codificação de comportamentos por meio de scripts contendo códigos de programação. Tudo isso é realizado por meio da elaboração de projetos práticos, como os que nos prepararam para criarmos os games Forest Ping Pong e Motorista da Pesada.

Quem sabe, por meio dos estudos e experimentações que realizamos em nossa série, você não possa tirar do papel aquele jogo que sempre sonhou em ver se tornar realidade? Então venha conosco nesta caminhada rumo a novos conhecimentos!

Invertendo os papeis

Até o momento, já elaboramos os fluxos de animação para dois controladores dentro de nosso projeto, sendo um responsável pelo controle de caminhada dos personagens (animControllerCaminhando01) e o outro originalmente designado para controlar as animações dos pacientes, mas que, no momento, está atrelado ao componente Animator do objeto Doutor_rindo (animControllerPacienteBase).

Em nossa aventura, iremos controlar, de fato, as ações a serem realizadas pelo médico em seu consultório, sendo a movimentação dos pacientes a ser controlada, posteriormente, pelo próprio game. Portanto, vamos ajustar os parâmetros dos componentes Animator de cada personagem presente em cena para que o jogador possa dirigir adequadamente a caminhada do doutor pelo cenário.

Para isso, vamos editar nosso projeto, abrindo o Unity Hub e clicando 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, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene. Certifique-se de estar com a aba Scene em evidência na tela, conforme exemplificado pela imagem a seguir:

Na aba Hierarchy, vamos selecionar o GameObject paciente_base, subordinado a Pacientes. Na aba Inspector, desative o componente Controller Mov_Tank, deixando vazia a caixa de seleção destacada em verde na imagem a seguir.

Ainda na aba Inspector, vamos alterar o valor do parâmetro Controller do componente Animator do paciente para o controlador de nome animControllerPacienteBase:

Feitas as alterações referentes ao objeto de nosso paciente, vamos realizar agora algumas modificações comportamentais para o GameObject que representa o médico. Na aba Hierarchy, selecione Doutor_rindo, subordinado a Personagens.

Na aba Inspector, altere o valor do parâmetro Controller do componente Animator para o controlador de nome AnimControllerCaminhando01, conforme exemplo a seguir:

Por fim, ainda na aba Inspector, adicione um novo componente do tipo Controller Mov_tank e altere o valor de seu parâmetro Personagem Anim para Doutor_rindo (destacado em roxo na imagem a seguir), seja clicando e arrastando o item do referido GameObject da aba Hierarchy em direção à caixa de seleção, seja por meio da seleção do item na lista de objetos da caixa de seleção.

Já temos o “pacote básico” configurado para controlar o doutor pelo cenário, mas, para facilitar um pouco nossas experimentações, vamos reposicionar seu objeto em cena. Ainda com Doutor_rindo em evidência, na aba Inspector, altere os valores dos seguintes parâmetros de seu componente Transform para os indicados a seguir:
  • Position X = 2, Y = 0, Z = -12.9;
  • Rotation X = 0, Y = -45, Z = 0.

Agora, que tal experimentarmos a simulação da execução do game para presenciarmos, literalmente, os primeiros passos de nosso personagem principal pelo cenário? Para isso, vá até a aba Game e pressione o ícone do botão Play:

Percebemos agora uma clara inversão de papeis, sendo que agora é o paciente que acena para nós, dando "tchauzinhos” no consultório, enquanto controlamos a caminhada de Tratanildo Doencita pelo cenário.

Embora seja muito interessante aferirmos que a transferência de comportamentos e de controles entre modelos humanoides no Unity seja bem fácil de ser trabalhada, ainda temos alguns aspectos a serem corrigidos, como nos momentos em que a transição entre os estados de animação “caminhandoState” e “paradoState” teima em não ocorrer adequadamente:

Posteriormente, iremos nos atentar a estes detalhes, mas, por ora, vamos realizar outra importante intervenção em nosso projeto. Interrompa a simulação, clicando novamente sobre o ícone do botão Play e retornando à aba Scene.

Experimentando um novo ponto de vista

Em um cenário repleto de detalhes e objetos como o nosso, seria interessante que a visualização de câmera acompanhasse nosso personagem em suas andanças pelo consultório. Por enquanto, a câmera principal de nosso cenário, representada pelo objeto Main Camera, encontra-se estacionada em um ponto fixo do cenário.

Que tal, então, realizarmos uma breve intervenção em alguns aspectos de câmera de nosso projeto para que possamos explorar o consultório sob novos pontos de vista?

Vamos iniciar essa experimentação duplicando o GameObject de nossa câmera principal. Na aba Hierarchy, clique com o botão direito sobre Main Camera (subordinado a Cameras) e, no menu suspenso, selecione a opção Duplicate:

Conceda o nome “CameraDoutor”, sem as aspas, ao novo objeto criado.


Selecione novamente Main Camera e, na aba Inspector, vamos desativar o objeto temporariamente, deixando vazia a caixa de seleção em destaque na imagem a seguir:

Agora, na aba Hierarchy, vamos mover CameraDoutor na hierarquia para que fique subordinado ao próprio GameObject do médico. Para tal, clique sobre CameraDoutor e arraste-o em direção ao objeto Doutor_rindo. CameraDoutor será exibido na listagem da aba Hierarchy logo após os demais elementos que compõem Doutor_rindo:


Selecione novamente CameraDoutor e, na aba Inspector, altere os valores dos seguintes parâmetros de seu componente Transform para os indicados a seguir:
  • Position X = 0, Y = 0.06, Z = -0.06;
  • Rotation X = 15, Y = -45, Z = 0.
CameraDoutor ficará posicionado em cena logo atrás do GameObject do doutor, um pouco acima de sua cabeça, com a câmera levemente inclinada para baixo, permitindo a visualização tanto das costas do médico quanto do cenário logo à sua frente:

Chegou a hora de experimentarmos essa nova forma de explorar o consultório! Para isso, vá até a aba Game e pressione o ícone do botão Play:

É muito interessante ter este novo ponto de vista em nosso game, pois ele permitirá ao jogador uma exploração mais aprofundada dos pormenores do cenário, permitindo, entre outros, uma melhor busca por elementos em cena. Porém, assim como destacamos logo após configurarmos o controle de caminhada do GameObject do doutor no cenário, temos muitos aspectos a corrigir ainda, como a “tremedeira” da câmera ao se deslocar pelo cenário e o “mergulho” na estrutura das paredes ao se girar o personagem principal próximo aos limites físicos do consultório:

Ao término dos testes, 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.

Próximos passos

Percebemos hoje que muitos dos experimentos que fizemos nos encontros anteriores utilizando como “cobaia” nosso paciente inicial puderam ser aplicados ao modelo humanoide do médico sem dores de cabeça.

Isso demonstra na prática que, após bem configurados e ajustados, determinados comportamentos, animações e ações dentro de um game podem ser reaproveitados em larga escala. A estratégia que adotamos vale tanto para projetos considerados pequenos (como o nosso) quanto para jogos com muitos elementos, cenários e desafios.

Em nossos próximos encontros, corrigiremos alguns dos comportamentos indesejados que observamos nos testes realizados hoje, e também continuaremos a progredir na construção geral de 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: Davi Sousa

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. Escrevemos sob a licença Creative Commons BY-SA 3.0 - você pode usar e compartilhar este conteúdo desde que credite o autor e veículo original.