Aprendendo a programar jogos em Unity: povoando as prateleiras com recipientes coloridos

Prosseguiremos construindo o cenário do projeto, tornando-o, pouco a pouco, mais parecido com um consultório de verdade.

em 07/07/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Chão, paredes, teto, janelas, biombos, vasos e prateleiras… A cada encontro, aumentamos a quantidade de elementos que compõem o cenário de Consultório do Dr. Tratanildo. Hoje não será diferente, pois iremos adicionar elementos interessantes a serem posicionados sobre nossas recém-instaladas prateleiras.

Se esta é a primeira vez que você acessa nossa série, sinta-se convidado a juntar-se a nós: será um prazer recebê-lo(a) neste divertido processo de aprendizado. Juntos, vamos entender melhor sobre como podemos utilizar de forma efetiva a ferramenta Unity no processo de desenvolvimento de games em geral.

A partir do primeiro tópico da série, aprenderemos a configurar e instalar a ferramenta em nossos computadores para, posteriormente, criarmos divertidos jogos de diferentes temáticas e estilos, por meio do desenvolvimento de interessantes projetos que envolvem codificação e criação de cenários, lógicas de jogo e scripts controladores. Venha conosco e vamos juntos nesta caminhada rumo a novos conhecimentos!

Frascos sobre as prateleiras

A última atividade que realizamos em nosso encontro anterior foi a inserção de prateleiras translúcidas no cenário, posicionadas perpendicularmente às paredes do consultório. Iremos utilizá-las como suporte para dispor no ambiente itens como frascos de vidro e medicamentos.

Vamos, então, iniciar nossas atividades abrindo o projeto do jogo. Abra o Unity Hub e 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, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene.

Por meio da aba Project, vamos abrir as pastas Assets, Multimedia e, por fim, 3D. Selecione o modelo tridimensional de nome Sanitizer.

Clique e arraste o referido modelo em direção à aba Hierarchy, mais especificamente sobre o item referente ao GameObject CenarioFixo, para que seja criado um novo objeto subordinado a ele. Renomeie o novo GameObject para Recipiente_1, conforme ilustração a seguir:

Note que o novo objeto inserido representa um frasco de vidro, normalmente utilizado para armazenamento de produtos para limpeza e sanitização, como álcool em gel ou sabão líquido. No entanto, seria meio complicado posicionar um objeto desse tamanho em prateleiras como as que inserimos no ambiente, não é mesmo? 

Nem sempre GameObjects derivados de modelos tridimensionais criados externamente ao Unity apresentam a mesma escala de dimensões em relação aos demais objetos de uma cena.

Anteriormente, tivemos de alterar os valores do atributo Scale X, Y e Z dos componentes Transform das plantas para 400 a fim de aumentar suas dimensões, deixando-as adequadas à escala do cenário em que foram inseridas:


Agora, em relação a Recipiente_1, a situação será inversa: iremos diminuir os valores de Scale X, Y e Z de seu componente Transform para 0.3, deixando assim o objeto em questão menor, adequado a ser posicionado sobre uma das prateleiras.


Iremos posicionar Recipente_1 sobre uma das prateleiras, ao alterar os valores dos demais parâmetros de seu componente Transform conforme indicado a seguir:
  • Position X = 17, Y = 5.9, Z = 12.75;
  • Rotation X = 0, Y = -0.75, Z = 0.
Duplique Recipiente_1, clicando com o botão direito sobre o item na aba Hierarchy e selecionando a opção Duplicate. Renomeie o novo objeto criado para Recipiente_2. Repita a operação de duplicação, concedendo o nome Recipiente_3 ao novo GameObject.

Conceda os seguintes valores aos parâmetros do componente Transform de Recipiente_2:
  • Position X = 7.25, Y = 5.9, Z = 12.65;
  • Rotation X = 0, Y = -0.75, Z = 0.
Já para Recipiente_3, serão estes os valores a serem introduzidos:
  • Position X = -13.7, Y = 6.9, Z = 3.7;
  • Rotation X = 0, Y = -90, Z = 0.
Observe como ficaram posicionados os novos elementos introduzidos no cenário:

Líquidos dentro dos frascos

Geralmente, recipientes como os que acabamos de inserir no cenário servem para armazenar substâncias diversas, que podem apresentar cores diferentes em suas composições. Para representar de uma forma mais fidedigna essa característica e, também, para tirar o “aspecto gélido” de uma parede branca com vidros transparentes, vamos conceder cores translúcidas aos modelos dos novos GameObjects, semelhantemente ao que realizamos em relação às prateleiras.

Para isso, como já estamos acostumados a fazer de alguns encontros para cá, iremos criar novos materials a serem armazenados na pasta 3D, realizando alterações em seus parâmetros e indicando seu uso por meio do parâmetro Materials de seus componentes do tipo Mesh Renderer.

Na aba Project, com a pasta 3D em aberto, clique com o botão direito sobre uma área vazia da janela. No menu suspenso, selecione a opção Create e, por fim, Material. Dê o nome de MaterialRecipiente_A para o novo material criado. Repita a operação, concedendo o nome MaterialRecipiente_B ao segundo material.

Selecione MaterialRecipiente_A e, na aba Inspector, altere o valor de seu parâmetro Rendering Mode para Transparent, permitindo assim que se utilize cores semitransparentes em objetos que renderizem esse material. A seguir, clique sobre o quadradinho presente do lado direito do parâmetro Albedo e, na janela de seleção de cores, escolha a cor com os seguintes atributos: R = 130, G = 255, B = 100, A = 220.


Na aba Project, selecione agora MaterialRecipiente_B. Na aba Inspector, iremos alterar também o valor de seu parâmetro Rendering Mode para Transparent. A cor também será alterada, porém para a que é representada pelos seguintes atributos: R = 190, G = 100, B = 255, A = 220.


Criamos, então, dois novos materials, cada um com uma tonalidade de cor diferente (verde e roxa). Agora, na aba Hierarchy, iremos selecionar o GameObject Recipiente_1. Note que, na aba Inspector, não temos nenhum componente específico além do onipresente Transform.

Ocorre que os três GameObjects que inserimos em cena apresentam objetos subordinados a si que, estes sim, contemplam os componentes relativos aos materials e meshes das partes de um frasco de vidro, tais como o corpo, a etiqueta externa identificadora, a tampa, etc. Essa composição será interessante para nós, pois não precisaremos trocar a coloração de todo o objeto, apenas da parte que nos interessa: o corpo de vidro do objeto.

Para ver esses objetos subordinados, na aba Hierarchy, clique na seta ao lado esquerdo de Recipiente_1:


Finalmente, vamos modificar o material do corpo do frasco, deixando-o com a coloração desejada. Ainda na aba Hierarchy, selecione o objeto subordinado de nome Cube. Altere, agora, o valor de Element 0 do atributo Materials de seu componente Mesh Renderer para o material de nome MaterialRecipiente_A. Note que o corpo acaba por se tornar verde, conforme exemplificado pela imagem a seguir:

Vamos repetir essa operação para os objetos de nome Cube subordinados aos GameObjects Recipiente_2 e Recipiente_3, conforme indicação a seguir:
  • Recipiente_2: Element 0 = MaterialRecipiente_B;
  • Recipiente_3: Element 0 = MaterialRecipiente_A.
Teremos, ao final, dois frascos de vidro com conteúdo interno de coloração verde e um com coloração roxa, conforme podemos visualizar a seguir:

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

Adicionamos mais um tipo de elemento cenográfico à nossa cena, povoando parcialmente as prateleiras fixadas nas paredes do consultório e enriquecendo um pouco mais o cenário de nossa nova aventura.

Em nosso próximo encontro, iremos finalizar o processo de posicionamento de elementos sobre as prateleiras para darmos início à inserção e ao posicionamento do leito hospitalar no cenário.

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

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.