Pular para o conteúdo principal

Input GetAxis

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.

Comentários

Postar um comentário

Postagens mais visitadas deste blog

Comera Follow com Rotate

Ainda pensando no movimento da câmera, outro recurso muito utilizado é a rotação dela em torno do player. Observe o código a seguir. var player:Transform; var turnSpeed:float = 4.0f; var smooth:boolean = false; private var offset:Vector3; private var velocidade:Vector3; function Start () { offset = transform.position - player.position; Cursor.lockState = CursorLockMode.Locked; } function LateUpdate(){ offset = Quaternion.AngleAxis (Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset; if(smooth){ var targetPosition : Vector3 = player.position + offset; transform.position = Vector3.SmoothDamp(transform.position, targetPosition, velocidade, 0.3f); }else{ transform.position = player.position + offset; } transform.LookAt(player.position); } Nesse código tem-se agora, o player ou target do tipo Transform, atente-se a isso, dessa forma temos acesso apenas à propriedade Transform do player, existe também a variável turnSpeed que será a velocidade de rotaçã...

GUI

Nesse artigo será abordado como trabalhar com alguns elementos da GUI. Os elementos abordados serão, TextField, Button, Slider e Box. Quando for trabalhar com elementos da UI (User Interface) deve-se primeiro fazer o import necessário no início do arquivo de script  import UnityEngine.UI;  A função OnGUI da própria Unity é a responsável por exibir e interagir com os elementos criados via código.  function OnGUI(){  } Botão Para criar botões, o código será o seguinte if ( GUI.Button( Rect( 10, 70, 100, 30 ), "Input"  ) ){         Debug.Log(stringToEdit);     } Essa é uma das maneiras de criar um botão, pois o método GUI.Button tem várias assinaturas. Da maneira utilizada o primeiro parâmetro está relacionado à posição do botão na interface, que s...

Input GetKey

Quando se trata de entrada do usuário, na unity temos vários métodos que permitem isso, nesse post será explicado sobre as teclas. Quando se quer saber se alguma tecla foi apertada, pode-se usar Input.GetKey, Input.GetKeyDown e Input.GetKeyUp. Esse três métodos retornam valores booleanos (true ou false), caso a tecla passada como parâmetro atenda a condição de cada método, por exemplo Input.GetKey(tecla) : retorna true se a tecla estiver pressionada. Input.GetKeyDown(tecla) : retorna true se a tecla foi pressionada e já altera seu valor, enquanto a tecla nao for solta e pressionada novamente, não volta a ser true. Input.GetKeyUp(tecla) : retorna true quando a tecla é solta, o oposto do Input.GetKeyDown. O exemplo abaixo vai mudar a cor do nosso gameObject dependendo do estado da tecla. private var cor:Material; function Start () { cor = GetComponent. ().material; } function Update () {...