Se hoje está sendo a primeira vez que você tem contato com conteúdos de nossa série, aproveite para juntar-se a nós para conhecer mais sobre o interessante universo do desenvolvimento de jogos digitais.
Por meio do uso da ferramenta Unity para desenvolvimento de projetos práticos de programação, a cada encontro estamos aprendendo diferentes formas, métodos e técnicas para tirar do papel games de diferentes estilos gráficos e de gameplay.
A partir do primeiro tópico da série, são abordados diferentes passos do processo de elaboração de um jogo digital, que vão desde a instalação e a configuração da plataforma Unity em nossos computadores até a elaboração e a configuração dos elementos pertencentes a fases e cenários de um game, tais como os personagens, as regras, os itens e os adversários presentes no contexto de uma aventura virtual.
Ao trabalharmos em projetos práticos de criação de jogos, conseguimos observar e experimentar conceitos úteis ao processo de concepção de games de diferentes estilos. Mesmo se você não teve a oportunidade prévia de aprender tópicos sobre programação, recomendamos experimentar aplicar as atividades propostas, pois as etapas são de fácil assimilação, preparadas especificamente para permitir a criação de jogos mesmo por quem não sabe bem por onde começar.
Durante a elaboração da série, concluímos a construção de dois games 2D: Forest Ping Pong, uma “homenagem florestal” ao clássico Pong (Atari, 1972), e Motorista da Pesada, um “platformer rodoviário” inspirado no arcade japonês City Connection (Jaleco, 1985). Estamos trabalhando atualmente no projeto de Consultório do Dr. Tratanildo, um puzzle tridimensional ambientado em um excêntrico consultório médico, cuja concepção nos permite experimentar conceitos envolvidos na construção de jogos 3D, tais como aspectos envolvendo movimentação de personagens e uso de câmeras.
Por meio dos textos disponibilizados no índice da primeira entrada da série, você pode conferir o processo de elaboração dos três jogos, inclusive, podendo experimentar os dois primeiros títulos diretamente de seu navegador, por meio de links disponíveis nos últimos textos relacionados a seus projetos.
Se você gostou da ideia de aprender a criar jogos e experiências virtuais, não perca mais tempo e venha conosco nessa jornada repleta de novos conhecimentos e de muita diversão!
Som na caixa, DJ!
Ao repararmos nos conteúdos presentes dentro das pastas contendo as multimídia de nosso projeto, podemos perceber que existem itens interessantes, que podem ser aproveitados para aumentar a imersão do jogador durante as diferentes etapas do game. Um exemplo disso são os variados efeitos sonoros e trilhas sonoras que temos à disposição, dentro da pasta dedicada ao armazenamento de áudios.
Vamos introduzir ao nosso projeto o uso de uma música introdutória, a ser tocada quando o menu inicial do game for exibido. Para tal, 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 sua edição.
Na aba Inspector, localize o GameObject AudioAdmin. Clique com o botão direito sobre o elemento e, no menu suspenso apresentado, selecione a opção Audio e, em seguida, AudioSource. Nomeie o novo objeto como “FundoSonoro_MenuPrincipal” e, via aba Inspector, aplique as seguintes intervenções a atributos de seu componente Audio Source:
- AudioClip: aponte ao campo o áudio de nome “the_arcade_detective”;
- Play On Awake: deixe a caixa selecionada (true);
- Loop: deixe a caixa selecionada (true);
- Volume: conceda o valor 0.3.
Com as configurações realizadas, o referido áudio irá tocar continuamente durante a exibição do menu até que o jogador inicie a partida. Essa interrupção ocorrerá devido a um comando que implementamos anteriormente, em rotina do script ControllerFase, que interrompe explicitamente os demais sons do game antes de iniciar a execução do som correspondente aos primeiros diálogos com o paciente.
Por falar em scripts e em áudios, anteriormente configuramos dois efeitos sonoros para o game, sendo um utilizado quando as pílulas de saúde eliminam um agente de doenças e o outro ainda sem uso, mas inicialmente planejado para ser executado quando pílulas de saúde interagissem com agentes de doenças de cores diferentes das suas.
Em encontros anteriores, configuramos rotinas de ações a serem executadas quando ocorresse um “tratamento errado”, inseridas dentro da função TratamentoErrado do script ComportamentoDoenca. Vamos abrir o script e introduzir um comando para que, ao ocorrer a interação entre pílulas e monstrinhos de cores diferentes, o segundo efeito sonoro seja executado.
Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique duas vezes sobre o ícone do script ComportamentoDoenca para editarmos seu conteúdo no Visual Studio.
Localize a função TratamentoErrado e, antes da concessão do valor false à variável iniciouProcessoDeTratamento, introduza o seguinte conjunto de linhas de código:
// Efeito sonoro de erro
ControllerFase.instance.efeitoSonoroRuim.Play();
Salve o script e feche o Visual Studio, retornando ao editor do Unity para prosseguirmos com as intervenções de hoje.
Mobiliando o consultório
Um dos elementos tridimensionais que separamos para nosso projeto, mas que não viemos a utilizar até o momento, é o da cadeira de escritório. Embora não tenhamos à mão o modelo de uma mesa para simularmos mais fielmente o mobiliário de um consultório médico, vamos povoar um pouco mais o cenário com esse elemento, posicionando cópias do modelo em posições específicas do recinto.
Na aba Hierarchy, localize o objeto Ambientacao, subordinado a CenarioFixo, e deixe-o em evidência. Em seguida, na Project, abra as pastas Assets, Multimedia e, por fim, 3D. Localize o ícone do modelo tridimensional de nome “chair_model”, clique e arraste-o em direção a Ambientacao, na aba Inspector, por três vezes, criando três instâncias novas de objetos 3D, subordinadas ao referido GameObject.
Nomeie os três novos objetos como “Cadeira_1”, “Cadeira_2” e “Cadeira_3”. Para cada objeto, modifique os valores de seus componentes Transform conforme segue:
- Cadeira_1:
- Position X = -12.3, Y = 0, Z = 10.75;
- Rotation X = 0, Y = -45, Z = 0;
- Scale X, Y e Z = 0.1.
- Cadeira_2:
- Position X = -12.3, Y = 0, Z = -12.5;
- Rotation X = 0, Y = 270, Z = 0;
- Scale X, Y e Z = 0.1.
- Cadeira_3:
- Position X = -12.3, Y = 0, Z = -9.3;
- Rotation X = 0, Y = 270, Z = 0;
- Scale X, Y e Z = 0.1.
Os novos objetos serão posicionados em cena conforme mostra a imagem a seguir.
Uma surpresa capilar
Como última intervenção no projeto antes da configuração da sequência definitiva das fases, vamos dar uma olhada em um trecho do gameplay atual de nosso jogo:
É possível notar que, embora nosso querido médico naturalmente não tenha sido provido pela natureza com uma vasta cabeleira em sua cuca, um pequeno problema em relação ao seu modelo tridimensional faz com que a parte traseira central de seu cabelo fique invisível durante a movimentação do personagem pelo cenário.
Essa questão relaciona-se diretamente com a forma a qual o elemento tridimensional de seu “tufo central” de cabelo foi configurado, durante o processo de modelagem do personagem. Em softwares de edição de modelos 3D, como o Blender, é possível indicar quais faces dos polígonos devem ser renderizadas, e provavelmente o criador do modelo acabou se esquecendo de configurar essa parte do corpo do personagem para ser exibida corretamente em ambas as faces.
O mais adequado para se solucionar o problema seria a edição do modelo de Tratanildo e a reimportação de seu arquivo no Unity, mas, para não adicionar complexidade a nossa série, vamos “quebrar o galho” do doutor, introduzindo uma “peruquinha virtual” à estrutura de alguns dos GameObjects que o representam no projeto.
Inicialmente, vamos ativar o objeto DoutorCenario, subordinado a Doutores, dentro da estrutura hierárquica de Personagens. Localize o objeto Dr, subordinado a DoutorCenario, e expanda a lista de objetos subordinados a si, para visualizar o GameObject que representa a parte central do cabelo do médico, de nome hair2.
Os objetos subordinados a Dr são os elementos gráficos do modelo tridimensional, por apresentarem atrelados a si componentes com propriedades visuais sobre texturas e modelos, como Skinned Mesh Renderers, por exemplo.
Esses objetos são animados durante as movimentações e interações do personagem no cenário, obedecendo a posicionamentos previamente configurados na estrutura do modelo, armazenado em outros elementos de DoutorCenario.
Na aba Hierarchy, expanda o seguinte conjunto de objetos subordinados a DoutorCenario:
- ROOTJ;
- Spine01J;
- Spine02J;
- Spine03J;
- Spine03J;
- Spine04J;
- NeckJ;
- HeadJ.
O objeto HeadJ é a referência posicional que os elementos da cabeça do médico, subordinados a Dr, obedecem para a aplicação das animações. Como não iremos editar o objeto, vamos criar um novo elemento subordinado diretamente a HeadJ, para que ele possa acompanhar as movimentações e animações dos demais elementos que seguem seu posicionamento.
Clique com o botão direito sobre HeadJ e selecione a opção Create Empty.
O novo objeto deverá receber o nome de “PeruquinhaDoDoutor”, recebendo os seguintes valores para os atributos de seu componente Transform:
- Position X = 0.0425, Y = 0, Z = 0;
- Rotation X = 90, Y = 90, Z = 0;
- Scale X, Y e Z = -1.
Em seguida, com o objeto selecionado, na aba Inspector atrele ao objeto novos componentes de tipo Mesh Filter e Mesh Renderer.
Para o atributo Mesh do componente Mesh Filter, conceda o valor correspondente ao elemento de nome hair2. Já para o atributo Element 0 de Materials, no componente Mesh Renderer, conceda o valor correspondente ao material de nome lambert4.
Esses valores são semelhantes aos adotados pelo componente Skinned Mesh Renderer do cabelo presente atualmente na cabeça do doutor.
Ao adicionarmos um objeto com as mesmas características visuais do cabelo de Tratanildo, porém com a escala invertida (valores de Scale = -1), na prática teremos um espelhamento da visualização do cabelo, a ser exibido quando controlarmos o médico pelo cenário, enxergando-o em terceira pessoa por trás de seu modelo.
Essa intervenção técnica somente necessita ser realizada para GameObjects que representam o médico e que possam ser visualizados por trás em algum momento da jogatina. Esse é o caso de apenas dois objetos, DoutorCenario e DoutorConversa.
Selecione DoutorCenario e desative-o, por meio da aba Inspector. Selecione agora DoutorConversa, ativando-o e repetindo os mesmos passos que realizamos anteriormente, concedendo um objeto subordinado a HeadJ e configurando seus componentes internos, conforme ilustração a seguir.
Desative DoutorConversa e realize simulações de execução do jogo, indo à aba Game e clicando sobre o ícone do botão Play. Note a presença da trilha sonora no menu inicial do game e o efeito sonoro que é executado a se realizar tratamentos incorretos, durante partidas na dificuldade alta.
Não deixe de prestigiar, é claro, o novíssimo implante capilar virtual do médico mais atrapalhado do mundo dos games.
Próximos passos
Finalizamos, enfim, os ajustes necessários em nosso projeto, antes de configurarmos a sequência definitiva das fases de Consultório do Dr. Tratanildo. Parabéns por ter atingido tal etapa de nosso processo!
O nosso próximo encontro será recheado de emoções, pois, ao configurarmos o projeto com os atributos do conjunto final de desafios, efetivamente concluiremos a construção de nosso game. Foi uma longa jornada, cuja linha de chegada está logo ali, a poucos metros de distância. Vamos juntos encarar o desafio final!
Nos encontraremos novamente no próximo dia 20 de setembro. Até mais! Fique ligado sempre nas novidades do GameBlast!
Revisão: Ives Boitano
















