Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos II / Aula
Como nosso personagem é na verdade uma esfera, vamos criar um script chamado “Rolar” para implementar a funcionalidade de movimento baseado em física.
Clique no personagem, vá no inspector e clique em Add Component->New Script. Digite o nome “Rolar” para o novo script o qual será criado e clique em “Create and Add”. Isso criará um script chamado Rolar.cs e já o adicionará ao personagem (Figura 28). Vá no painel “Project” e veja que o script ficou na raíz dos Assets. Mova-o para a pasta “Scripts” criada por você anteriormente para manter o seu projeto mais organizado.
Dê um duplo clique no script Rolar.cs para o abrir no MonoDevelop. Ele deve abrir como na Figura 29.
Similar ao movimento utilizando o Translate visto na aula passada, iniciaremos obtendo os valores dos eixos horizontal e vertical e guardando nas variáveis “h” e “v”. Depois vamos criar uma variável Vector3 chamada “forca”, a qual terá suas componentes criadas utilizando os valores de “h” e “v”, que são os valores dos eixos (a componente Y do vetor de força será zero, pois não queremos movimentos para cima/baixo). Isso fará com que o nosso vetor “forca” represente precisamente para onde o jogador está desejando que o personagem vá, de acordo com os comandos do teclado (teclas W, S, A, D ou setas) ou do joystick. Veja esse código parcial do método Update na Figura 30.
Não precisaremos indicar que a esfera irá rolar no piso, pois o próprio componente Rigidbody e suas interações físicas com a cena faz esse trabalho da presença de alguma força aplicada.
Então precisamos aplicar essa força ao personagem para que ele se mova. Para isso, devemos executar um método chamado AddForce(), que é na verdade do Rigidbody ao qual o personagem está associado. Lembre-se que tanto o script Rolar como o Rigidbody são ambos componentes associados aos personagens, então precisamos encontrar uma forma do script conseguir acessar outro componente do personagem a ele associado. Por sorte existe um método no Unity chamado GetComponent, ele permite que um script possa obter uma referência a qualquer componente do GameObject associada a ela e salvar essa referência em uma variável para poder usar posteriormente.
Para pegar a referência ao Rigidboby, você precisa digitar somente duas linhas de código. Primeiro crie uma variável na sua classe do tipo Rigidbody com o nome “rigidbody” (em minúsculo). Depois, no método Start() adicione a linha:
rigidbody = GetComponent
Pronto. A partir de agora existe uma variável chamada “rigidbody” acessível de qualquer método dessa classe que mantém uma referência ao Rigidbody presente no personagem, assim podemos utilizá-la para aplicar a nossa força agora. Ver Figura 31.
Voltando ao método Update(), agora que temos acesso ao rigidbody do personagem através da nossa variável criada, basta aplicar a força que já calculamos com uma simples linha:
rigidbody.AddForce (forca);
Pronto. Agora pode salvar o script, voltar ao jogo e pressionar Play. Você conseguirá controlar seu personagem com as teclas W, S, A, D do teclado e ele irá se locomover pela cena. O movimento baseado em física é bem mais realista e, portanto, difícil de controlar, pois se a esfera estiver rolando para uma direção com muita velocidade e você der o comando para ela ir para outra direção, a mudança de velocidade não acontecerá bruscamente, e sim, gradualmente, como quem realmente está tentando mover uma esfera bem pesada. Essa jogabilidade realista é um dos desafios de se completar uma fase do jogo em tempo hábil a ainda resgatar os futuros polígonos os quais adicionaremos em outras aulas.
Veja o código atual do script Rolar na Figura 32.
Versão 5.3 - Todos os Direitos reservados