Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Dando sequência ao processo iniciado em nosso encontro anterior, continuaremos a implementar o suporte a controles de videogame em nosso projeto, realizando modificações em scripts controladores do labirinto e da barra inferior do Canvas.
Se esta é a primeira vez que você acessa conteúdos de nossa série, considere-se especialmente convidado a conhecer as diferentes possibilidades abertas pelo uso de ferramentas de desenvolvimento, como a Unity, para tirar do papel os jogos que sempre sonhou em tornar realidade.
A cada encontro, construímos juntos projetos de programação de games que nos permitem experimentar diferentes métodos, técnicas e ferramentas utilizados globalmente pelos estúdios de desenvolvimento de jogos, no processo de criação de games dos mais variados estilos gráficos e de gameplay.
A partir do primeiro tópico da série, você terá a oportunidade de acompanhar desde as etapas mais elementares do processo de desenvolvimento de um jogo, como a instalação e a configuração da ferramenta Unity em nossos computadores, até os passos que envolvem a confecção dos elementos que compõem um jogo: fases, desafios, regras e objetos; inserindo e configurando imagens, sons e modelos 3D, e codificando scripts controladores de comportamentos de interação entre os elementos.
Até o momento, já concluímos a construção de dois jogos 2D: Motorista da Pesada e Forest Ping Pong. No momento, estamos trabalhando na confecção do puzzle tridimensional Consultório do Dr. Tratanildo. Vale muito a pena conferir os processos que nos levaram a finalizar os dois primeiros jogos, e os passos que já concluímos no processo de desenvolvimento do terceiro game, por meio do índice disponibilizado no primeiro texto da série.
Caso você tenha gostado da ideia de aprender a criar suas próprias aventuras digitais, “aperte os cintos” e junte-se a nós, para acelerarmos juntos nessa estrada repleta de novos conhecimentos e de muita diversão!
Após as configurações iniciais para permitir que o jogo reconheça os direcionais digitais do controle, concluímos a implementação da movimentação básica do personagem pelo cenário, tanto utilizando os já referidos direcionais, quanto por meio de interações com o analógico esquerdo do controle do Xbox One.
Realizaremos, agora, intervenções semelhantes às que concluímos no encontro anterior, dessa vez voltadas aos scripts controladores do manejo do labirinto e, também, das opções exibidas na barra inferior do Canvas, que permitirão, dentre outras ações, utilizarmos o controle para pegarmos pílulas e para iniciarmos o manejo da máquina que controla a inclinação do leito do consultório.
Para tal, vamos abrir nosso 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.
Na aba Project, abra a pasta Assets e, em seguida, Scripts. O primeiro script a sofrer intervenções hoje será o responsável pelo controle da inclinação do labirinto; clique duas vezes sobre o ícone do script ControllerMov_Labirinto para iniciarmos sua edição no Visual Studio.
Dentro da estrutura de códigos da função void Update, mais especificamente no conteúdo da estrutura condicional switch (Geral.ModoDeControle), modifique as linhas que se referem aos modos de controle SoTeclado e Controle para o conteúdo descrito a seguir:
alteracoesInclinacao.z -= taxaInclinacao * Time.deltaTime;
alteracoesInclinacao.z += taxaInclinacao * Time.deltaTime;
alteracoesInclinacao.x += taxaInclinacao * Time.deltaTime;
alteracoesInclinacao.x -= taxaInclinacao * Time.deltaTime;
alteracoesInclinacao.x -= (Time.deltaTime * Input.GetAxis("Horizontal") * 60);
alteracoesInclinacao.x -= (Time.deltaTime * Input.GetAxis("DPAD_h") * 45);
alteracoesInclinacao.z -= (Time.deltaTime * Input.GetAxis("Vertical") * 60);
alteracoesInclinacao.z -= (Time.deltaTime * Input.GetAxis("DPAD_v") * 45);
Por meio desta troca de linhas de código, realizamos duas ações básicas:
Para os casos em que o jogador deseja utilizar unicamente o teclado como forma de interação com o jogo, o comportamento esperado mantém-se o mesmo, com as inclinações ocorrendo por meio de interações observadas nos eixos Horizontal (teclas A e D, setas para direita e para esquerda do teclado) e Vertical (teclas W e S, setas para cima e para baixo do teclado);
Escolhendo interagir por meio do controle de videogame, as inclinações ocorrerão de forma semelhante ao observado no modo Teclado+Mouse, utilizando os direcionais e o analógico esquerdo do controle para aplicar a inclinação desejada ao labirinto.
Os valores 60 e 45, presentes nas linhas de concessão de valores para os eixos X e Z de alteracoesInclinacao, são multiplicadores de intensidade sugeridos, que podem ser alterados, caso queira, a partir da sua percepção, durante os testes de manejo do labirinto que vier a realizar.
Salve o script, minimize o Visual Studio e retorne ao editor do Unity para darmos sequência aos ajustes necessários para manejo do jogo por meio de controles de videogame.
No cenário de Consultório do Dr. Tratanildo, ao aproximarmos o personagem principal de determinados objetos de interesse (como as pílulas e o leito), opções de interação são apresentadas na barra inferior do Canvas. Até o momento, o jogador pode confirmar a opção apresentada na tela pressionando a tecla X do teclado, conforme indicado por elemento específico na interface:
Realizaremos ajustes em scripts para que seja possível utilizar um botão de ação do controle de videogame no lugar desta tecla específica do teclado.
Inicialmente, vamos editar o script ControllerBarraInferior, para que ele possa identificar o pressionamento da tecla adequada do controle de videogame e conclua a interação pretendida no momento. Para tal, clique duas vezes sobre seu ícone na pasta Scripts, exibida atualmente pela aba Project do editor do Unity.
A intervenção a ser realizada no script envolverá a troca de apenas uma linha de código, presente dentro da estrutura de void Update.
if ((Geral.ModoDeControle.Contains("Teclado") && Input.GetKeyDown(KeyCode.X)) || (Geral.ModoDeControle == "Controle" && Input.GetButtonDown("Fire1")))
Embora condensado em um comando único, o novo trecho introduzido realiza uma separação clara: caso o jogo esteja, no momento, em modo de controle envolvendo o uso de teclado (seja Teclado+Mouse, seja SoTeclado), o game verificará o pressionamento da tecla X; se o jogo estiver sendo jogado por meio do uso de controle de videogame, será observado o pressionamento do botão denominado Fire1.
O nome “Fire1” corresponde a uma das entradas do Input Manager do Unity convenientemente pré-configuradas pelo fabricante da ferramenta em duplicidade. No caso, para controles de videogame, ele mapeia a entrada joystick button 0, que, normalmente, corresponde ao principal botão de ação do controle. Em nosso caso concreto, trata-se do botão A do joystick do Xbox.
A princípio, com esta alteração, já conseguimos interagir com os elementos do cenário utilizando o controle de videogame, porém, considerando que o botão principal do controle é representado pela letra A (e não X, como o direcionado ao controle), teremos de realizar mais algumas intervenções para que a informação correta seja exibida na barra inferior do Canvas.
Salve o script, minimize o Visual Studio e retorne ao editor do Unity. Novamente na barra Project, com a pasta Scripts em evidência, clique duas vezes sobre o ícone do script PegaPilula para editarmos seu conteúdo.
Dentro das chaves da função OnTriggerStay, localize o trecho de código ao final do bloco, com comandos a serem realizados quando a barra inferior do Canvas será exibida (logo após o comando if (ativarBarraInferior)).
barraInferior.TextoTeclaOpcao.text = "X";
if (Geral.ModoDeControle.Contains("Teclado"))
else if (Geral.ModoDeControle == "Controle")
barraInferior.TextoTeclaOpcao.text = "A";
Assim que o personagem se aproximar das pílulas cenográficas do consultório, dependendo do modo de controle utilizado, a barra inferior indicará visualmente ao jogador que ele deverá pressionar X para realizar a ação indicada, se estiver utilizando teclado, ou o botão A, se estiver utilizando joystick no momento.
Salve o script, minimize o Visual Studio e retorne ao editor do Unity. Abriremos para edição, agora, o script ConcedePilula, clicando por duas vezes sobre seu ícone, conforme ilustrado a seguir.