Se esta é a primeira vez que você lê conteúdos de nossa série, aproveite a oportunidade para conhecer mais sobre o processo de desenvolvimento de jogos digitais, colocando a mão na massa e tirando do papel jogos de diferentes estilos gráficos e de gameplay.
Por meio do uso da ferramenta Unity, estamos desenvolvendo projetos práticos de programação de games. A cada encontro, experimentamos diferentes métodos, técnicas e procedimentos aplicados às mais distintas etapas do processo de criação de uma aventura digital.
A partir do primeiro tópico da série, abordamos desde os passos que envolvem a instalação e a configuração da plataforma Unity em nossos computadores até a construção e a configuração, de fato, dos elementos que pertencem aos desafios propostos em um game: fases, cenários, personagens, regras e interações entre elementos.
Os projetos práticos que elaboramos para abordar conceitos de programação de jogos nos permitem observar e experimentar elementos úteis ao processo de criação de games de diferentes estilos. Mesmo se você não teve experiências prévias de programação de jogos ou de sistemas, é possível tirar do papel aquele game que sempre sonhou em tornar realidade: nessa série, as etapas de programação e de configuração dos elementos nos projetos são sempre acompanhadas de exemplos e de explicações sobre os conceitos abordados.
Até o momento, já concluímos a produção de dois games 2D: Forest Ping Pong, inspirado no clássico Pong (Atari, 1972), e Motorista da Pesada, um platformer cujos aspectos de gameplay se assemelham aos do arcade japonês City Connection (Jaleco, 1985). Atualmnente, estamos elaborando o game Consultório do Dr. Tratanildo, um puzzle ambientado em um consultório médico 3D, com inspirações em conceitos de gameplay de jogos dos anos 1980 e 1990, como Dr. Mario (Nintendo, 1990), Pac-Man (Namco, 1980) e Tama (Time Warner Interactive, 1994).
Vale muito a pena acompanhar os passos de elaboração dos três games, por meio dos textos destacados no índice da primeira entrada da série. Inclusive, é possível experimentar os dois primeiros títulos diretamente de seu navegador, por meio de links presentes nos últimos textos relacionados a seus projetos.
Se você tem a vontade de aprender a criar suas próprias aventuras virtuais, “aperte os cintos” e junte-se a nós em uma jornada repleta de novos conhecimentos e de muita diversão!
Corações e melodias
Em comparação aos dois primeiros jogos que criamos, Consultório do Dr. Tratanildo é um game de construção bem mais complexa. É natural que, diante da quantidade de elementos do projeto, acabemos por encontrar algumas “pontas soltas” no projeto durante a execução de sessões de testes.
Duas dessas “pontas soltas” referem-se ao uso de sons para vitórias e derrotas no jogo, que idealizamos mas acabamos por não implementar; e ao coração 2D indicativo do leito do paciente, cuja visualização mantém-se ativa, mesmo em momentos em que não seria necessário tê-lo à vista (como nas cutscenes entre paciente e médico).
Antes de introduzirmos a primeira leva de configurações dos desafios finais do game, vamos ajustar esses pequenos tópicos, por meio de intervenções no script controlador de fases e em campos de componentes de GameObjects de nosso projeto.
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 as intervenções.
Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique duas vezes sobre o ícone do script ControllerFase para iniciarmos sua edição no Visual Studio.
Na seção de declaração de variáveis, localize o bloco de códigos referente aos elementos de cena (Canvas + Laboratório). Altere a linha em que são declarados os GameObjects pacienteCenario e pacienteNoLeito pelo conteúdo a seguir.
public GameObject pacienteCenario, pacienteNoLeito, coracaoLeito;
A variável coracaoLeito será responsável por referenciar o elemento no laboratório que contém o coração 2D giratório. Codificaremos um comando para que ele seja exibido apenas após a cutscene entre paciente e médico.
Localize o método AtenderPaciente e, ao final do bloco de comandos de ativações e desativações, acrescente a linha de comandos a seguir.
coracaoLeito.SetActive(false);
Em seguida, localize a função TransicaoParaTratamento. Imediatamente antes do comando referente à reativação de barraInfoAcoes, acrescente a linha de comandos a seguir.
coracaoLeito.SetActive(true);
Com as intervenções realizadas, o coração cenográfico será exibido somente durante a etapa de busca de medicamentos pelo cenário.
Ainda com o script ControllerFase aberto para edição, vamos introduzir comandos para que sejam executados determinados sons ao se vencer ou perder um desafio no game.
Localize a Coroutine pacienteCurado e, dentro de suas chaves, procure pelas linhas responsáveis pela reexibição da seta do mouse, próximas ao final da Coroutine. Introduza imediatamente antes dessas linhas o seguinte bloco de comandos:
// Executa efeito sonoro de vitória
somVitoria.Play();
Com a inserção do comando, cada vez que o tratamento de um paciente se encerrar, um som comemorativo tocará, indicando que o paciente concluiu o desafio.
Em seguida, localize a função Update. Dentro do bloco de comandos a serem executados ao se esgotar o tempo disponível para tratamento (tempoRestante < 0), também imediatamente antes do comando responsável pela reexibição da seta do mouse, introduza a segunte linha de código:
somDerrota.Play();
Salve o script e feche o Visual Studio. Vamos retornar ao editor do Unity para prosseguirmos com as edições.
Localize, na aba Hierarchy, o objeto AudioAdmin e expanda a listagem dos elementos subordinados ao GameObject. Note que ainda não temos objetos que fazem referência aos áudios a serem tocados em caso de vitória ou de derrota no game. Precisaremos criá-los e, para economizarmos tempo, vamos utilizar como base o objeto EfeitoSonoro_01, devido a ter os mesmos parâmetros configurados para o componente Audio Source que desejamos para os novos objetos (Loop, Play On Awake, Volume etc.).
Clique com o botão direito sobre EfeitoSonoro_01 e selecione a opção Duplicate. Repita a operação, para que tenhamos à mão duas cópias do GameObject. Em seguida, renomeie uma das cópias para “EfeitoSonoro_Vitoria” e o outro para “EfeitoSonoro_Derrota”.
Selecione EfeitoSonoro_Vitoria e, na aba Inspector, localize o atributo AudioClip de seu componente Audio Source. Conceda ao campo o valor correspondente ao áudio de nome “vitoria”, conforme ilustrado a seguir.
Em seguida, selecione EfeitoSonoro_Derrota. Na aba Inspector, localize o atributo AudioClip de seu componente Audio Source. Conceda ao campo o valor correspondente ao áudio de nome “derrota”.
Na aba Hierarchy, selecione o objeto ControladorFase. Via aba Inspector, conceda os seguintes valores aos atributos de seu componente Controller Fase:
- Coracao Leito: aponte o objeto AreaEntregaPilulas;
- Som Vitoria: indique o objeto EfeitoSonoro_Vitoria;
- Som Derrota: indique o objeto EfeitoSonoro_Derrota.
Por fim, na aba Hierarchy, selecione o objeto AreaEntregaPilulas, subordinado a CenarioFixo, e desative o GameObject, por meio da caixa de seleção da aba Inspector, ao lado de seu nome. Dessa forma, o objeto desde o princípio estará desativado, sendo exibido apenas após a cutscene entre paciente e médico.
New sicks on the block
Até o momento, temos três pacientes devidamente cadastrados, com seus respectivos labirintos configurados e agentes de doenças posicionados:
- O glorioso paciente da blusa vermelha, que apresenta problemas intestinais graves há dias:
- A inesquecível paciente da camisa roxa, que sofre de problemas pulmonares constantes:
- O inoxidável paciente bigodudo, cuja amnésia consome suas memórias há tempos:
Como já realizamos inúmeros testes e validações com os três pacientes, seus labirintos e agentes de doenças, é justo mantê-los, na versão definitiva do game, como sendo os três primeiros desafios a serem enfrentados pelo jogador.
Os labirintos de cada um dos três primeiros pacientes envolveram o uso de pílulas de saúde das cores vermelha, amarela e roxa para a realização dos tratamentos. Para darmos sequência à elaboração dos desafios, vamos configurar hoje mais dois pacientes no game, a serem tratados com pílulas das cores verde e azul.
O mais novo “doente do pedaço” será um jovem que apresenta dores estranhas, abrangendo as duas extremidades laterais de seu abdômen:
Tratanildo, esperto como é, já identificará que se trata de um caso resolvível por meio da concessão de pílulas verdes ao paciente. O labirinto que representa o interior do paciente ilustra o por quê das dores nas laterais do corpo do enfermo.
Já o quinto enfermo de nossa aventura é um rapaz um tanto quanto “emocionado”: sofrendo de paixão, suas dores se concentram em seu coração, e nada melhor do que uma boa dose de pílulas azuis administrada por Tratanildo Doencita para abrandar essa chama dolorosa e ardente em seu interior.
O interior de seu corpo é representado por um labirinto que, dentro outros elementos, apresenta uma formação que remete ao desenho de um coração, infestado de agentes de doenças azuis.
A construção desse labirinto envolve a configuração de três monstrinhos azuis e de onze obstáculos, nos parâmetros do projeto.
Para que essa turma entre em cena, na aba Hierarchy, clique sobre o objeto ControladorFase. Via aba Inspector, vamos realizar as seguintes intervenções em atributos de seu componente ControllerFase:
- Tipo Paciente: amplie o tamanho do vetor para 5.
- Element 3: conceda o valor 0;
- Element 4: conceda o valor 2.
Esses valores correspondem aos itens presentes em Estilos Visuais Pacientes, cujas representações serão adotadas pelos novos pacientes (skin_adventurer e skin_manAlternative).
- Fala Paciente: amplie o tamanho do vetor para 5.
- Element 3: conceda o seguinte texto, sem as aspas:
“Olá, doutor. Estou sofrendo com dores constantes nas duas laterais de meu abdômen. Será que o senhor consegue me sarar?” - Element 4: conceda o seguinte texto, sem as aspas:
“Querido doutor, já não sinto mais meu coração bater como antigamente... será que é por causa da paixão ou estou doente de verdade?” - Fala Doutor: amplie o tamanho do vetor para 5.
- Element 3: conceda o seguinte texto, sem as aspas:
“Vou precisar examiná-lo primeiro, mas creio que a sua doença não resistirá a uma boa dose de pílulas verdes.” - Element 4: conceda o seguinte texto, sem as aspas:
“Não sou cupido, jovem, mas vou te examinar. Uma boa dose de pílulas azuis sempre ajuda a sarar um coração machucado.” - Fala Final: amplie o tamanho do vetor para 5.
- Element 3: conceda o seguinte texto, sem as aspas:
“As pílulas miraculosas que o senhor administrou resolveram meu problema. Muito obrigado!” - Element 4: conceda o seguinte texto, sem as aspas:
“A vida é bela novamente! Meu coração bate mais forte do que nunca! Obrigado, doutor!”
- Tempo Max Tratamento: amplie o tamanho do vetor para 5.
- Element 3 e Element 4: conceda o valor 150 a ambos.
- Posicao Monstros Azuis: amplie o tamanho do vetor para 3.
- Element 0: X = 3, Y = -3, Z = 4;
- Element 1: X = 3, Y = -7, Z = 4;
- Element 2: X = 1, Y = -5, Z = 4.
- Posicao Monstros Verdes: amplie o tamanho do vetor para 4.
- Element 0: X = -3, Y = 7, Z = 3;
- Element 1: X = 0, Y = 7, Z = 3;
- Element 2: X = -3, Y = -7, Z = 3;
- Element 3: X = 0, Y = -7, Z = 3.
Ambos os pacientes apresentarão um tempo menor para tratamento, em comparação aos demais já configurados. Também é interessante lembrar que, para Posicao Monstros Azuis e Posicao Monstros Verdes, o valor de Z refere-se ao paciente; por isso, todos os monstros azuis configurados até o momento apresentam valor igual a 4 (quinto paciente) e os verdes com valor igual a 3 (quarto paciente).
- Posicao Obstaculos: amplie o tamanho do vetor para 31 (11 pré-existentes + 9 para o labirinto do quarto paciente + 11 para o labirinto do quinto paciente).
- Element 11: X = -5, Y = -7, Z = 3;
- Element 12: X = 5, Y = -7, Z = 3;
- Element 13: X = -5, Y = 7, Z = 3;
- Element 14: X = 5, Y = 7, Z = 3;
- Element 15: X = 3.5, Y = 4, Z = 3;
- Element 16: X = -3.5, Y = 4, Z = 3;
- Element 17: X = 3.5, Y = -4, Z = 3;
- Element 18: X = -3.5, Y = -4, Z = 3;
- Element 19: X = 0, Y = 0, Z = 3;
- Element 20: X = 5, Y = -3, Z = 4;
- Element 21: X = 5, Y = -7, Z = 4;
- Element 22: X = 4, Y = -5, Z = 4;
- Element 23: X = 3, Y = -1, Z = 4;
- Element 24: X = 3, Y = -9, Z = 4;
- Element 25: X = 0.5, Y = -2, Z = 4;
- Element 26: X = 0.5, Y = -8, Z = 4;
- Element 27: X = -1, Y = -3.5, Z = 4;
- Element 28: X = -3.5, Y = -4, Z = 4;
- Element 29: X = -5, Y = 2.5, Z = 4;
- Element 30: X = 2, Y = 7, Z = 4.
- Dimensao Obstaculos: amplie o tamanho do vetor para 31 (11 pré-existentes + 9 para o labirinto do quarto paciente + 11 para o labirinto do quinto paciente).
- Element 11: X = 1, Y = 5, Z = 3;
- Element 12: X = 1, Y = 5, Z = 3;
- Element 13: X = 1, Y = 5, Z = 3;
- Element 14: X = 1, Y = 5, Z = 3;
- Element 15: X = 4, Y = 1, Z = 3;
- Element 16: X = 4, Y = 1, Z = 3;
- Element 17: X = 4, Y = 1, Z = 3;
- Element 18: X = 4, Y = 1, Z = 3;
- Element 19: X = 10, Y = 1, Z = 3;
- Element 20: X = 1, Y = 3, Z = 4;
- Element 21: X = 1, Y = 3, Z = 4;
- Element 22: X = 1, Y = 1, Z = 4;
- Element 23: X = 3, Y = 1, Z = 4;
- Element 24: X = 3, Y = 1, Z = 4;
- Element 25: X = 2, Y = 1, Z = 4;
- Element 26: X = 2, Y = 1, Z = 4;
- Element 27: X = 1, Y = 2, Z = 4;
- Element 28: X = 4, Y = 1, Z = 4;
- Element 29: X = 4, Y = 4, Z = 4;
- Element 30: X = 2, Y = 5, Z = 4.
Feitas as inserções dos valores, experimente testar o game, indo à aba Game e clicando sobre o ícone do botão Play. Experimente observar como se comportam os novos personagens, além da efetivação das demais alterações que realizamos hoje no projeto.
Ao final dos testes, interrompa a execução do jogo, clicando novamente sobre o ícone do botão Play e retornando à aba Scene. Não se esqueça de salvar a cena (menu File, Save) e o projeto (menu File, Save Project) antes de fechar o Unity.
Próximos passos
Enfim, entramos na reta final da construção de Consultório do Dr. Tratanildo. Ao introduzirmos novos pacientes à aventura, evoluímos nosso jogo de forma consistente, deixando-o mais próximo de sua versão definitiva.
Em nosso próximo encontro, concluiremos a configuração dos demais pacientes e realizaremos os derradeiros ajustes no projeto para, de fato, finalizarmos a construção desse divertido jogo.
Nos encontraremos novamente no próximo dia 27 de setembro. Até mais! Fique ligado sempre nas novidades do GameBlast!
Revisão: Ives Boitano



























