Aprendendo a programar jogos em Unity: preparando estruturas para que o personagem possa segurar as pílulas

Agregaremos ao GameObject de Doutor Tratanildo elementos que representarão os medicamentos coletados pelo cenário.

Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após realizarmos, no encontro anterior, interessantes intervenções na dinâmica de movimentação do personagem principal de nosso game pelo consultório, daremos sequência ao processo de implementação da funcionalidade de coleta de pílulas por Tratanildo Doencita, configurando os elementos tridimensionais que representarão os fármacos escolhidos pelo doutor para tratar seus pacientes.

Caso hoje seja a primeira vez que você tem contato com os conteúdos de nossa série, aproveite essa oportunidade para juntar-se a nós em uma divertida jornada de aprendizados sobre o desenvolvimento de games.

Por meio da elaboração de projetos práticos, aprenderemos a utilizar a ferramenta Unity para nos apoiar no processo de criação de jogos dos mais variados estilos gráficos e de gameplay.

No momento, estamos elaborando o projeto Consultório do Dr. Tratanildo, um jogo que mescla características de puzzles e de arcades bidimensionais famosos, como Dr. Mario (Nintendo) e Pac-Man (Namco), embora seja ambientado em um excêntrico consultório médico tridimensional.


A partir do primeiro texto da série, você terá a oportunidade de aprender mais sobre o processo de criação de um game na prática, desde as etapas consideradas mais básicas, como a instalação e configuração da ferramenta em nossas máquinas, até a codificação das regras do jogo, a configuração e o posicionamento de elementos multimídia na estrutura das fases e a construção da aventura como um todo.

Não se acanhe, aperte os cintos e venha conosco para seguirmos juntos nessa caminhada rumo a novos conhecimentos!

Estruturas à mão

Dentre as principais características de games ambientados em cenários tridimensionais, uma das que mais se destacam é a possibilidade de se representar, também de forma tridimensional, elementos e itens utilizáveis pelos personagens fora de ambientes “controlados” do game, tais como menus de ação ou inventários.

Como já temos o modelo tridimensional de Doutor Tratanildo bem configurado em cena, no que se refere às animações de movimentação dentro do consultório, que tal implementarmos no projeto a possibilidade de exibir nas mãos do médico as pílulas que ele coletar no cenário, antes de utilizá-las efetivamente nos tratamentos propostos?

Para tirarmos do papel essa ideia, vamos abrir 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.

O primeiro passo necessário para implementação da nova funcionalidade será a de atrelarmos às mãos do modelo que representa Tratanildo nas andanças pelo cenário as pílulas de saúde, cuja exibição ocorrerá apenas ao se coletar os medicamentos junto às prateleiras do consultório.

Para que as pílulas possam também sofrer influência das animações a qual o médico está sujeito ao caminhar pelo consultório, deveremos criar dois objetos vazios hierarquicamente subordinados aos GameObjects específicos do modelo do boneco que representem as mãos do doutor. Esses objetos terão subordinadas a si as pílulas de saúde, e pela ordem hierárquica a qual todos foram submetidos, durante a execução das animações, as pílulas estarão, de fato, “coladas” às palmas das mãos do médico.

Na aba Hierarchy, selecione o objeto DoutorCenario, subordinado a Doutores. Iremos “destrinchar” a hierarquia de seus objetos subordinados para encontrarmos os elementos que representam as mãos do modelo 3D.

Clique na seta à esquerda de DoutorCenario para exibir seus objetos subordinados. Repita a operação, expandindo a árvore hierárquica dos seguintes GameObjects:
  • ROOTJ;
  • Spine01J;
  • Spine02J;
  • Spine03J;
  • Spine04J;
  • lClavicleJ;
  • lShoulderJ;
  • lElbowJ;
  • lWristJ.
Por fim, clique com o botão direito sobre lWristJ e selecione a opção Create Empty, conforme indicado na imagem a seguir:

O nome do novo objeto criado será “ContainerCapsulaEsq”, sem as aspas. Selecione-o e conceda os seguintes valores aos atributos de seu componente Transform:
  • Position X = -0.005, Y = -0.001, Z = 0;
  • Rotation X = 0, Y = 90, Z = 0;
  • Scale X, Y e Z = 0.02.
Na aba Project, abra as pastas Assets, Multimedia, 3D e, por fim, NossasPilulas. Clique e arraste os seguintes modelos tridimensionais em direção à ContainerCapsulaEsq, na aba Hierarchy:
  • Pilula_amarela;
  • Pilula_azul;
  • Pilula_roxa;
  • Pilula_verde;
  • Pilula_vermelha.
Certifique-se de que, na aba Hierarchy, todas encontram-se subordinadas a ContainerCapsulaEsq, conforme ilustra a imagem a seguir:

Vamos ajustar as dimensões e configurações comportamentais das pílulas recém-introduzidas no cenário. Selecione todos os novos GameObjects subordinados a ContainerCapsulaEsq e, na aba Inspector, realize as seguintes intervenções:
  • Altere o valor dos atributos Scale X, Y e Z de seus componentes Transform para 1;
  • Remova o componente Box Collider dos objetos, clicando com o botão direito sobre o título do componente e selecionando a opção Remove Component.
Note como ficará legal a representação visual das pílulas na mão esquerda do médico:

Esquerda e direita

Em princípio, Doutor Tratanildo poderá coletar duas pílulas por vez para levar ao paciente em tratamento, portanto seria interessante possibilitarmos que sua mão direita também possa segurar pílulas, caso seja necessário.

Na aba Hierarchy, clique com o botão direito sobre ContainerCapsulaEsq e selecione a opção Copy. Subordinado a Spine04J, temos o GameObject rClavicleJ. Selecione-o e, da mesma forma que fizemos anteriormente para os elementos do lado esquerdo do corpo de Tratanildo, expanda sua árvore hierárquica de objetos até selecionar o último da lista a seguir:
  • rShoulderJ;
  • rlbowJ;
  • rWristJ.
Clique com o botão direito sobre rWristJ e selecione a opção Paste As Child. Teremos criado uma cópia de ContainerCapsulaEsq subordinada à mão direita do médico, como podemos notar pela ilustração a seguir:

Precisamos realizar alguns ajustes, para evitar que os medicamentos sejam “segurados pela manga” do doutor:
  • Renomeie o novo objeto para “ContainerCapsulaDir”, sem as aspas; 
  • Modifique, via aba Inspector, o valor do atributo Position X de seu componente Transform para 0.005.
Por fim, para testarmos a implementação prévia que realizamos no dia de hoje, deixe apenas os GameObjects Pilula_amarela (subordinado a ContainerCapsulaEsq) e Pilula_vermelha (subordinado a ContainerCapsulaDir) ativos.

Realize, agora, a simulação da execução do jogo, indo à aba Game e pressionando o ícone do botão Play:

Interessante, não? Após os testes, interrompa a simulação, clicando novamente sobre o ícone do botão Play. 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

Encontro após encontro, nosso jogo está ganhando ares cada vez mais interessantes: já temos a estrutura visual inicial para coleta das pílulas pelo cenário, a apresentação da opção de coleta via mensagem no Canvas e algumas variáveis de controle implementadas via scripts.

Em nosso próximo encontro, voltaremos a codificar comportamentos e interações entre elementos do game, por meio de intervenções nos scripts controladores que criamos até o momento.

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