Se hoje for a primeira vez que você tem acesso aos textos de nossa série, aproveite esta oportunidade para conhecer mais sobre nossa jornada de aprendizados sobre o universo do desenvolvimento de jogos digitais. Elaborando projetos práticos de programação de games, estamos aprendendo a cada encontro um pouco mais sobre como ferramentas como o Unity podem nos ajudar a criar jogos dos mais diversos estilos gráficos e de gameplay.
A partir do primeiro texto da série, apresentamos diferentes tópicos envolvendo aspectos importantes do processo de desenvolvimento de um game. Por meio do desenvolvimento de projetos práticos, abordaremos desde a instalação e a configuração da ferramenta em nossos computadores até a construção, de fato, das fases e dos desafios presentes em um jogo, abrangendo etapas importantes como a configuração dos elementos de um cenário, a codificação de scripts controladores dos comportamentos de personagens e objetos, além da definição dos objetivos a serem alcançados pelo jogador e da forma que ele poderá alcançá-los.
Até o momento, já concluímos a construção de dois games 2D durante a série: Forest Ping Pong, um jogo inspirado no clássico Pong (Atari, 1972), e Motorista da Pesada, um “platformer rodoviário” cujos conceitos de gameplay foram inspirados nos apresentados pelo arcade City Connection (Jaleco, 1985).
Atualmente, estamos trabalhando no projeto do game Consultório do Dr. Tratanildo. Quando estiver completo, será um puzzle ambientado em um consultório médico 3D, cuja construção apresenta inspirações diretas em clássicos dos anos 1980 e 1990, tais como Pac-Man (Namco, 1980) e Dr. Mario (Nintendo, 1990). Aproveite e acesse o índice que disponibilizamos no primeiro texto da série para conferir tudo sobre sua construção e, também, a dos demais games já concluídos.
Mesmo que você não tenha tido a oportunidade prévia de aprender conceitos sobre programação, é possível e viável tirar do papel aquele game que sempre sonhou. Todas as decisões e conceitos que utilizamos na construção dos projetos foram pensados justamente de forma a possibilitar a todos entenderem o que está ocorrendo e conseguirem aplicar em seus projetos pessoais aquilo que aprenderam.
E então, você gostou da ideia de tirar do papel aquele game que sempre sonhou em tornar realidade? Se sim, conceda-se esta oportunidade e venha conosco em uma jornada repleta de novos conhecimentos e de muita diversão!
Editando o controlador de fases
Após configurarmos os GameObjects em cena responsáveis por referenciar os áudios do projeto durante as fases, é chegada a hora de editarmos alguns códigos do script controlador da fase para que as trilhas sonoras adequadas sejam executadas em momentos oportunos.
Como intervenção inicial no projeto, iremos configurar os dois sons correspondentes aos fundos sonoros para que sejam executados continuamente durante dois momentos específicos do processo de tratamento do paciente: um durante o momento em que ocorrem diálogos entre médico e paciente, e o outro durante a etapa de tratamento propriamente dita (busca por medicamentos e manejo do equipamento hospitalar).
Vamos iniciar nossas intervenções de hoje abrindo o projeto para edição: no Unity Hub, clique duas vezes sobre o item referente a ele. Na interface inicial do editor, na aba Project, abra a pasta Assets, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene.
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.
A primeira intervenção que realizaremos no código de ControllerFase tem relação com variáveis que deverão ser declaradas previamente, possibilitando que as funções saibam quais sons deverão ser executados nos momentos adequados.
Dentro do bloco de variáveis correspondentes aos elementos de cena, logo após as linhas com variáveis correspondentes às câmeras presentes no laboratório, introduza o seguinte trecho de código:
public AudioSource fundoSonoroConversaPaciente, fundoSonoroAcao, efeitoSonoroBom, efeitoSonoroRuim, somVitoria, somDerrota;
Com as variáveis devidamente declaradas, é hora de introduzirmos comandos para que os sons sejam executados adequadamente.
Dentro da estrutura da função AtenderPaciente, entre o bloco de códigos correspondentes às ativações e desativações de elementos do cenário e o bloco responsável pela troca de texturas dos personagens, introduza os seguintes comandos:
// Iniciar trilha sonora de conversa com o paciente
foreach (AudioSource audio in FindObjectsOfType<AudioSource>())
audio.Stop();
fundoSonoroConversaPaciente.Play();
Note que, além do comando Play, responsável por iniciar a execução do fundo sonoro correspondente, também estão presentes, antes do referido comando, códigos responsáveis pela interrupção do áudio de todos os AudioSources atualmente presentes no cenário.
Essa ação é realizada para que, independentemente do momento atual da fase, qualquer trilha sonora que já estivesse sendo executada no momento possa ser interrompida, evitando uma eventual sobreposição de músicas tocando ao mesmo tempo.
Uma observação interessante é que o comando Stop não apresenta erros ao ser executado em AudioSources que não estejam tocando áudios no momento. Simplesmente, ele não fará nada e não atrapalhará a realização das ações posteriores.
Agora, dentro da estrutura da função TransicaoParaTratamento, imediatamente antes do fechamento de suas chaves, introduza o seguinte bloco de comandos:
// Iniciar trilha sonora de ação
if (ehNovoTratamento)
{
foreach (AudioSource audio in FindObjectsOfType<AudioSource>())
audio.Stop();
fundoSonoroAcao.Play();
}
Os códigos recém-introduzidos são bem semelhantes aos adotados em AtenderPaciente, porém, aqui, é realizada uma verificação prévia do valor da variável local ehNovoTratamento.
Como utilizamos a função TransicaoParaTratamento tanto ao término da cutscene de diálogo entre médico e paciente quanto ao alternarmos entre os modos de coleta de pílulas e de manejo da cama hospitalar, realizaremos essa verificação para evitar que a trilha sonora seja reiniciada toda vez que o médico tiver de buscar pílulas adicionais no cenário.
Configurações adicionais via script e editor
Além da codificação para a execução dos fundos sonoros, iremos programar no script um comando específico para que, a cada vez que uma pílula interferir positivamente no tratamento, um efeito sonoro seja ouvido pelo jogador. Para tal, iremos acrescentar à estrutura da função ReduzirContadorDoenca o seguinte comando, imediatamente antes do fechamento de suas chaves:
efeitoSonoroBom.Play();
Diferentemente das demais intervenções de hoje, não queremos que os demais sons do jogo sejam interrompidos ao se executar o efeito sonoro desejado; por isso, bastou indicarmos o comando Play para seu respectivo AudioSource.
Salve o Script e feche o Visual Studio, retornando ao editor do Unity para realizarmos as intervenções finais de nosso encontro de hoje.
Na aba Hierarchy, selecione o GameObject ControladorAdmin. Em seguida, via aba Inspector, realize a concessão dos seguintes valores para as variáveis de seu componente do tipo Controller Fase:
- Fundo Sonoro Conversa Paciente: indique ao campo o elemento de nome FundoSonoro_01;
- Fundo Sonoro Acao: conceda como valor ao campo o elemento de nome FundoSonoro_02;
- Efeito Sonoro Bom: utilizaremos o elemento de nome EfeitoSonoro_01;
- Efeito Sonoro Ruim: será concedido como valor o elemento de nome EfeitoSonoro_02.
Embora ainda não tenhamos utilizado o efeito sonoro “ruim” nas rotinas do game, é interessante já deixá-lo configurado junto ao controlador de fases. Em breve, além de codificarmos seu uso, implementaremos os elementos correspondentes aos sons a serem tocados em casos de vitória e de derrota.
Para ver (e ouvir) a nova dinâmica sonora de nosso jogo em ação, vá até a aba Game e clique sobre o ícone do botão Play. Experimente coletar pílulas e manejar o leito hospitalar de forma a eliminar agentes de doenças para ouvir o sinal sonoro de que o tratamento está dando resultados.
Ao término da simulação de execução, clique novamente sobre o ícone do botão Play e retorne à 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 Unity.
Próximos passos
Nada como ouvir uma boa música enquanto estamos jogando, não é mesmo? Agora, nossos tratamentos não serão realizados no mais absoluto silêncio, embora tenhamos ainda que configurar outros elementos sonoros e comportamentais do projeto.
Em nossos próximos encontros, daremos sequência ao processo de implementação de importantes funcionalidades do game, tais como as que permitirão ao jogador avançar para a próxima fase ao término da realização de um tratamento médico.
Excepcionalmente, nosso próximo encontro será no dia 25 de janeiro. Até mais! Fique sempre ligado nas novidades do GameBlast!
Revisão: Johnnie Brian










