Ir para



  • Responder
Não há respostas neste tópico

#1 ixnaydk

    Enciclopédia

  • Administrador
  • 9.456 Posts:
  • Gender:Male

Postou 21 fevereiro 2012 - 03:42

Bom dia pessoal, tudo na boa?

Nesse post estarei explicando mais uma coisa que sempre usaremos no Unity, a movimentação de seu objeto (personagem).
Dessa vez, estarei usando a nova versão do Unity, a 3.5, talvez tenha alguns botões ou comandos diferentes caso vc esteja usando a versão 3.4.

Para começar, vamos criar um novo projeto em File -> New Project, não é necessário importar nenhum package.
Imagem anexa: 000.jpg

Após a criação do projeto, vamos alterar nossa câmera para Orthographic e o valor de Far para 100.
Lembre-se de deixar as posições XYZ zeradas.

Nossa câmera ficará assim.
Imagem anexa: 001.jpg

Feito isso, vamos adicionar um Cube na cena, esse cubo será nosso jogador.
Para adicionar, clique em GameObject -> Create Other -> Cube
Altere a posição Z do cubo para 6 e sua escala XYZ para 10,10,10.

Nosso jogador irá aparecer assim na tela.
Imagem anexa: 002.jpg

Agora vamos criar nosso script de movimentação.
Isso é uma coisa que podemos fazer de várias maneiras diferentes, mas vou explicar aqui um modo extremamente simples.

Para isso, vamos criar um script em JavaScript para dar vida a nosso jogador. Clique com o botão direito em Project -> Create -> Javascript
Dê o nome de Player para o script.

Após ter criado o script, dê dois cliques para abrir o MonoDevelop.
Observação: O MonoDevelop do Unity 3.5 está muito melhor que a versão antiga, recomendo atualizar.

Abrindo o Mono, vamos precisar setar três variáveis e adicionar algumas linhas de código
#pragma strict
var amtToMove : float;
var amtToMove2 : float;
var speed : float = 5.0f;

function Update () {
amtToMove = Input.GetAxisRaw("Vertical") * speed * Time.deltaTime;
amtToMove2 = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;

transform.Translate(Vector3.up * amtToMove);
transform.Translate(Vector3.right * amtToMove2); 
}
Explicando as linhas:
#pragma strict
Ainda não sei para que funciona :P Mas é uma linha padrão que é adicionada automaticamente no Unity 3.5

var amtToMove : float e var amtToMove2 : float
Estaremos usando essas duas variáveis como auxiliares na hora de nossa movimentação.

var speed : float
Aqui podemos setar a velocidade da movimentação de nosso jogador.

function Update()
Como já disse em algum outro tutorial, a function Update é atualizada a todo momento no jogo, vc não quer que seu personagem só se mexa pelo primeiro segundo né? :P

amtToMove = Input.GetAxisRaw("Vertical") * speed * Time.deltaTime
Aqui começa nossa movimentação, repare que temos alguns comandos novos, vamos explicar:
Input.GetAxisRaw("Vertical"): Por estarmos usando uma câmera com visão em 2D, só podemos andar sobre dois eixos, XY, ou seja, podemos andar na Vertical e na Horizontal. Esse comando estará detectando se estamos tentando andar para baixo ou cima (Vertical) ou direita e esquerda (Horizontal).
Time.deltaTime: Esse comando irá indicar por quanto tempo vc quer mover tal objeto, no caso, o jogador.
Então, podemos resumir nossa linha de código assim: Quero mover o personagem para cima/baixo, a velocidade 5 por X segundos.

amtToMove = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime
Vale a explicação acima, a diferença que o Horizontal significa frente/trás ou direita/esquerda.

transform.Translate(Vector3.up * amtToMove)
Essa linha é onde o personagem vai realmente se mover.
O transform.Translate indica a movimentação em uma certa direção. No caso, estaremos utilizando um Vector3.up que altera apenas o valor de Y enquanto vc segura o direciona para cima ou baixo.

transform.Translate(Vector3.right * amtToMove2)
Bem parecido com a explicação acima, a diferença que usamos um Vector3.right que faz a movimentação em X enquanto apertamos para ir para frente ou para trás.
Imagem anexa: 003.jpg

Nossa movimentação está completa, salve o arquivo e volte para o Unity.
Agora arraste o script criado para o Cube que foi feito anteriormente. E após isso, aperte Play.
Se vc usar as teclas direcionais, nosso cubo irá se mover \o/

Mas repare que a velocidade dele está muito baixa, vamos acertar isso.
Clique no cubo e na aba Inspector altere o valor de speed para 25.
Imagem anexa: 004.jpg

Nosso jogador está movimentando e em uma velocidade legal, só que agora temos um outro problema, ele está sumindo da tela quando chega nas extremidades.
Novamente, temos várias maneiras de resolver isso, mas vou mostrar uma maneira bem simples, usando apenas duas linhas de código.
Mas antes de programar isso, precisamos saber os limites da tela.

Para isso, vamos mover nosso cubo para as extremidades e verificar as posições, como nas fotos a seguir.

Limite Esquerdo, podemos considerar como limite o valor X -180 (apenas para deixar redondo).
Imagem anexa: 005.jpg

Limite Direito, vamos considerar como X 180 para arredondar também.
Imagem anexa: 006.jpg

Limite Superior, novamente para arredondar, vamos considerar Y 90.
Imagem anexa: 007.jpg

Limite Inferior, e para finalizar vamos considerar Y -90
Imagem anexa: 008.jpg

Lembrando que nem sempre temos a possibilidade de colocar valores arredondados, só usei aqui para facilitar o entendimento.

Agora com nossos valores anotados, vamos abrir o script e adicionar duas novas linhas logo após o último transform.Translate.
transform.position.x = Mathf.Clamp(transform.position.x,-180.0f,180.0f);
transform.position.y = Mathf.Clamp(transform.position.y,-90.0f,90.0f);

Explicando o Mathf.Clamp:
O Mathf.Clamp é usado para limitar algo entre certos valores. No caso, nosso algo será o jogador e nossos valores serão os que vimos nas fotos acima.
Um detalhe no Mathf.Clamp, sempre coloque o valor negativo primeiro e depois o valor positivo.

Nosso código completo precisa estar como na imagem abaixo.
Imagem anexa: 009.jpg

Cliquem em play e mova o personagem até os limites da tela, ele não irá mais atravessar \o/

E assim terminamos mais um tutorial sobre Unity 3D, mas guardem esse projeto que foi criado, pois no próximo estarei explicando como fazer nosso jogador sair atirando pela tela hehe

É isso ai, qualquer dúvida é só avisar.





1 usuário(s) está(ão) lendo este tópico

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)