Caso hoje seja a primeira vez que você teve contato com textos de nossa série, aproveite essa experiência para conhecer mais sobre esta divertida jornada de aprendizados sobre o mundo do desenvolvimento de jogos digitais que estamos trilhando periodicamente no GameBlast.
Elaborando diferentes projetos práticos de programação de games, a cada encontro estamos tendo a oportunidade de aprender um pouco mais sobre as técnicas e as ferramentas envolvidas na criação de divertidas aventuras digitais. Para isso, estamos utilizando como apoio durante a elaboração dos jogos a plataforma de desenvolvimento de jogos Unity, também adotada por inúmeros estúdios para a criação de jogos relevantes, tais como Among Us, Cuphead e Super Bomberman R.
A partir do primeiro texto da série, abordamos os passos necessários para o processo de desenvolvimento de um jogo, incluindo aqueles considerados mais “básicos”, como a instalação e a configuração do Unity em nossos computadores. Etapas importantes do processo, como a configuração e o posicionamento de elementos multimídia das fases e a elaboração dos scripts controladores de comportamentos e de regras de um game, são abordadas paulatinamente, sempre com explicações sobre os códigos, técnicas e ferramentas utilizadas, justamente para permitir a todos tirarem do papel os jogos que sempre sonharam em ver no “mundo real”.
No momento, estamos elaborando o game Consultório do Dr. Tratanildo: trata-se de um puzzle tridimensional ambientado em um excêntrico consultório médico, cujos aspectos de gameplay remetem tanto a clássicos dos arcades e dos videogames, como Pac-Man (Namco, 1980) e Dr. Mario (Nintendo, 1990), quanto a jogos dos primórdios do 3D, como Tama (Time Warner Interactive, 1994).
Vale muito a pena conferir, por meio do índice disponibilizado no primeiro texto da série, todo o processo de desenvolvimento do game até o momento, além de conhecer os outros dois jogos que já elaboramos durante o decorrer desta série: Forest Ping Pong e Motorista da Pesada.
Depois de toda esta introdução, fica aqui o convite: se você quer aprender a criar suas próprias aventuras virtuais “do zero”, junte-se a nós em uma trilha de aprendizados repleta de novos conhecimentos e de muita diversão!
Dois Tratanildos no pedaço?!
Depois de realizarmos importantes ajustes relacionados à tela de game over de nosso game, vamos prosseguir com nossa “caçada aos bugs” lançando um olhar especial ao tratamento do paciente em si, ou seja, a alguns aspectos relacionados às interações entre os agentes de doenças e as pílulas miraculosas dentro do labirinto.
Da forma em que configuramos nossa aventura até agora, no momento em que Tratanildo está buscando medicamentos para o tratamento, os agentes de doenças e as pílulas presentes no labirinto continuam a interagir com o ambiente, seja por meio da ação da gravidade (medicamentos “rolando” pelo cenário), seja pela programação do comportamento de caminhada dos monstrinhos.
Embora seja interessante e, até certo ponto, “fiel” à realidade, a interação desses elementos sem um controle direto do jogador pode ocasionar situações em que, aparentemente, o paciente se cura sem a necessidade de movimentações do maquinário atrelado ao leito, criando momentos esquisitos como esse:
Note que a conclusão do desafio ocorre enquanto o médico está caminhando pelo cenário, ocasionando até a engraçada situação de termos “dois Tratanildos” dentro do consultório.
É possível impedir a presença de dois médicos em cena, por meio da configuração de novas estruturas de código, porém, visando aumentar o engajamento do jogador nas atividades, vamos configurar o jogo para que somente haja movimentações de monstrinhos e das pílulas no labirinto nos momentos em que o labirinto estiver à vista do jogador.
Para tal, vamos abrir 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 representante do script ControllerFase.
O primeiro passo envolverá criarmos uma nova estrutura, responsável por ativar ou desativar o comportamento de pílulas e de agentes de doenças.
Melhorando o controle das pílulas no labirinto
Ao final do conteúdo de ControllerFase, imediatamente antes do último fechamento de chaves do arquivo, introduza o seguinte bloco de códigos:
public void PausarPilulasAgentes(bool pausar)
{
foreach (Rigidbody pilulaTratamento in FindObjectsOfType<Rigidbody>())
if (pilulaTratamento.tag.StartsWith("medicamento"))
pilulaTratamento.isKinematic = pausar;
foreach (ComportamentoDoenca agenteDoenca in FindObjectsOfType<ComportamentoDoenca>(true))
agenteDoenca.enabled = !pausar;
}
Por meio do método PausarPilulasAgentes, poderemos acionar em diferentes momentos o recurso para pausar ou retomar o comportamento esperado de pílulas e de agentes de doenças do labirinto.
Para selecionarmos apenas as pílulas de saúde pertencentes ao labirinto, foi necessário tomar uma sequência de ações, condensada no primeiro bloco de comandos:
- Inicialmente, selecionamos todos os objetos ativos da cena que contivessem atrelados a si componentes do tipo Rigidbody. É o caso das pílulas presentes no labirinto, diferentemente das pílulas encontráveis nas prateleiras ou nas mãos do médico.
- Posteriormente, para cada objeto localizado cuja Tag for iniciada pela palavra “medicamento”, a propriedade isKinematic é alterada para o valor representado pela variável pausar.
Em relação aos Rigidbodies, a propriedade isKinematic indica ao Unity se aquele objeto deve reagir ao conjunto de atributos de física apresentados pelo jogo no momento. Caso seu valor seja verdadeiro (true), tanto a gravidade quanto a ação de inclinações, de colisões e de forças não serão aplicados ao objeto em questão, e é esse o comportamento que desejamos ao solicitarmos uma pausa para as pílulas do labirinto.
Já a segunda metade dos comandos refere-se aos agentes de doenças. Como a movimentação dos monstrinhos é controlada por ação direta do script ComportamentoDoenca, ao desativarmos o componente para o objeto em questão, acabaremos interrompendo a realização das ações.
Com a função devidamente codificada, é hora de introduzirmos chamadas à ela dentro de algumas estruturas-chave de ControllerFase. Dentro do conteúdo do método TransicaoParaTratamento, imediatamente antes do bloco de comandos correspondente às condições para iniciar trilha sonora de ação, introduza as seguintes linhas de código:
// Pausar os comportamentos das pílulas e dos agentes de doenças
PausarPilulasAgentes(true);
Solicitaremos a pausa das pílulas e dos agentes dentro de TransicaoParaTratamento pois seu código é executado em diversos momentos em que a visualização do labirinto sai de cena:
- Logo após a “espiadinha” no labirinto, que ocorre assim que o paciente se deita sobre a cama hospitalar;
- Assim que a breve visualização do labirinto, que ocorre quando concedemos pílulas ao paciente, termina;
- No momento em que o jogador decide parar de manejar o maquinário do leito, retornando ao controle do doutor pelo cenário.
Agora, dentro das chaves da Coroutine MostrarLabirintoPacientes, imediatamente antes do comando yield return new WaitForSeconds, insira a seguinte linha de código:
PausarPilulasAgentes(false);
O comando será útil para que, assim que o labirinto for exibido em cena, as pílulas e os agentes de doenças não estejam pausados, apresentando os comportamentos esperados para cada elemento.
Salve o script, feche o Visual Studio e, voltando ao editor do Unity, realize uma simulação de execução, indo à aba Game e clicando sobre o ícone do botão Play:
Dá para notar que os elementos internos do labirinto respeitam a pausa determinada pelos comandos que codificamos, o que é bem interessante.
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
Realizamos mais um ajuste ao núcleo do jogo, corrigindo comportamentos visíveis ao se controlar o labirinto que, embora não sejam tecnicamente errados, podem passar uma sensação de imprecisão sobre a jogabilidade de nosso game.
Em nosso próximo encontro, daremos sequência aos ajustes propostos, além de prepararmos o terreno para novas intervenções, visando completarmos o ciclo de funcionalidades que estarão presentes em Consultório do Dr. Tratanildo.
Nosso próximo encontro será no dia 22 de fevereiro. Até mais! Fique sempre ligado nas novidades do GameBlast!
Revisão: Ives Boitano










