Uma das formas de entrada que o usuário pode ter e que a unity ofere é a entrada por meio de axis (eixos).
O input axis da unity funciona tanto para teclados quanto para joysticks, e o valor de retorno é entre -1 e 1. Porém, para PC ainda é possível detectar o movimento com o mouse, também um axis.
Para teclado e joysticks é possível pegar os eixos vertical e horizontal, e aumentar seu range/intervalo pode ser feito com uma variável auxiliar de sensibilidade.
A seguir um exemplo usando o teclado para movimentação simples.
var velocidade : float = 10.0;
var velocidadeRotacao : float = 100.0;
function Update () {
var movimento : float = Input.GetAxis ("Vertical") * velocidade * Time.deltaTime;
var rotacao : float = Input.GetAxis ("Horizontal") * velocidadeRotacao * Time.deltaTime;
transform.Translate (0, 0, movimento);
transform.Rotate (0, rotacao, 0);
}
Mas como funciona o código acima?
No código acima é possível ver, no início do script, a criação de duas variáveis velocidade e velocidadeRotacao. Essas variáveis servem de ajuste da sensibilidade, a primeira para o movimento em linha reta, no eixo Z e a segunda para a rotação no eixo Y.
E seguida, dentro da função Update, foi criada mais 2 variáveis, uma que servirá para a movimentação e outra para a rotação. A variável movimento vai receber o valor do Input.GetAxis("Vertical"), que vai de -1 a 1 e dependa da tecla pressionada, por padrão as teclas seta baixo e letra S farão a Input.GetAxis("Vertical") variar de 0 até -1, já a seta cima e letra W, farão essa variação ser de 0 até 1.
Quando nenhuma dessas teclas não está pressionada, o valor é 0.
Em seguida foi multiplicado o valor do axis pela variável de sensibilidade e depois pelo Time.deltaTime, para ajustar a sensibilidade e o frame rate da maquina que é executado, e só assim o resultado de toda essa multiplicação é inserido na variável movimento
O mesmo é aplicado para a variável rotacao, porém dessa vez o Input.GetAxis será na horizontal. Para variar o valor de 0 a -1 usa-se as teclas seta esquerda e A, já para variar de 0 até 1 as teclas serão tecla direita e D. Essa variável ficará responsável por girar nosso gameObject no eixo Y
Por último, no transform.translate do gameObject é aplicado o valor de movimento no eixo Z, para fazer o gameObject se movimentar para frente ou para trás e o valor de rotacao é aplicado no transform.Rotate, no valor de Y, fazendo assim nosso gameObject girar em sentido horário ou anti-horário.
Pronto! Esse simples código mostra como fazer uma movimentação básica na unity usando o teclado/joystick, lembrando que é possível alterar valores e teclas atribuídas ao Input.GetAxis
Observação
O transform.Translate e transform.Rotate são variáveis do tipo Vector3, ou seja, necessitam de 3 valores em sua composição, e são eles X, Y e Z. Você pode alterar o lugar da variável movimento e rotacao dentro do Translate e Rotate para verificar como isso afetará o movimento do seu gameObject.
E com o Mouse?
Para usar o mouse para a navegação, o Input.GetAxis não terá o valor de "Horizontal" e "Vertical", mas sim de "Mouse X" e "Mouse Y". Por exemplo.
var velocidadeHorizontal : float = 2.0;
var velocidadeVertical: float = 2.0;
function Update () {
var h : float = velocidadeHorizontal * Input.GetAxis ("Mouse X");
var v : float = velocidadeVertical * Input.GetAxis ("Mouse Y");
transform.Rotate (v, h, 0);
}
Nesse caso, não há a movimentação para frente/trás, mas sim a rotação, ao usar esse código você verá que ser gameObject vai girar no eixo Y com o movimento horizontal do mouse, ou seja, você mexe o mouse de um lado para o outro e seu gameObject gira sentido horário e anti-horário. Já quando você movimenta o mouse para frente e para trás seu gameObject "olha" para cima e para baixo.
Agora vai de você, que está programando escolher qual a melhor maneira de movimento e rotação que se adapta melhor ao seu jogo.
Valeu pelo tutorial
ResponderExcluir