E aí galera, beleza?
Identificar quando o jogador pressionou uma tecla específica do teclado é uma das tarefas mais comuns para jogos de computador e isso pode ser feito de uma forma bem fácil utilizando a classe Input da Unity.
A classe
Input foi criada para facilitar a interação com os mais diversos dispositivos de entrada (input), como teclado, mouse, controles e telas sensíveis ao toque, por isso, ela possui um conjunto de métodos bem interessantes para nos ajudar nessa interação.
Input.GetKey
Um desses métodos é o GetKey. O Input.GetKey identifica se uma tecla está sendo pressionada.
using UnityEngine;
public class InputTeclado : MonoBehaviour {
public void Update() {
if (Input.GetKey(KeyCode.A)) {
// Esta mensagem será exibida durante todos os
// próximos frames, enquanto a tecla estiver pressionada
Debug.Log("A tecla A está pressionada.");
}
}
}
O método GetKey retorna true (está sendo pressionada) ou false (não está sendo pressionada) para nos ajudar a identificar o estado atual de uma tecla específica. A partir do momento em que a tecla é pressionada, o método GetKey retornará true, indicando que a tecla está sendo pressionada, em todos os frames subsequentes, até que a tecla deixe de ser pressionada. Somente quando a tecla não estiver sendo pressionada, o método GetKey retornará false. Dessa forma, essa abordagem pode ser utilizada para mover um objeto enquanto uma tecla esteja pressionada.
Input.GetKeyDown
Identifica se uma tecla foi pressionada.
using UnityEngine;
public class InputTeclado : MonoBehaviour {
public void Update() {
if (Input.GetKeyDown(KeyCode.A)) {
// Esta mensagem será exibida somente UMA VEZ,
// no frame em que a tecla foi pressionada.
Debug.Log("A tecla A foi pressionada neste frame.");
}
}
}
O método GetKeyDown retorna true (foi pressionada) ou false (não foi pressionada) de forma semelhante ao GetKey. A principal diferença entre esses dois método é que o GetKey retornará true, indicando que a tecla está sendo pressionada , durante todo o período em que o jogador pressionar e segurar a tecla. Por sua vez, o GetKeyDown retornará true, indicando que a tecla foi pressionada, somente no primeiro frame em que isso aconteceu, ou seja, caso o jogador pressione e segure a tecla, o método GetKeyDown retornará true apenas uma vez, indicando o momento exato em que a tecla foi pressionada. Dessa forma, para movimentar um personagem com essa abordagem, será necessário que o jogador repetida a ação de pressionar e soltar a tecla, para cada vez que quiser mover o personagem.
Assim como é possível utilizar o GetKeyDown para saber o momento em que um tecla começou a ser pressionada, também podemos utilizar o GetKeyUp para saber quando esta mesma tecla deixou de ser pressionada.
Input.GetKeyUp
Identifica se uma tecla foi pressionada.
using UnityEngine;
public class InputTeclado : MonoBehaviour {
public void Update() {
if (Input.GetKeyUp(KeyCode.A)) {
// Esta mensagem será exibida somente UMA VEZ,
// no frame em que a tecla deixou de ser pressionada.
Debug.Log("A tecla A deixou de ser pressionada neste frame.");
}
}
}
O método GetKeyUp retornará true somente no frame em que a tecla deixou de ser pressionada e retornará false em todos os demais frames. Dessa forma, utilizando o GetKeyDown e o GetKeyUp em conjunto, conseguimos obter um comportamento similar ao do GetKey, como mostra o exemplo abaixo:
using UnityEngine;
public class InputTeclado : MonoBehaviour {
// Identifica se a tecla A está ou não pressionada
private bool teclaPressionada;
public void Start() {
this.teclaPressionada = false;
}
public void Update() {
if (Input.GetKeyDown(KeyCode.A)) {
// Marca a tecla como pressionada
this.teclaPressionada = true;
} else if (Input.GetKeyUp(KeyCode.A)) {
// Marca a tecla como não pressionada
this.teclaPressionada = false;
}
if (this.teclaPressionada) {
// Esta mensagem será exibida durante todos os
// próximos frames, enquanto a tecla estiver pressionada
Debug.Log("A tecla A está pressionada.");
}
}
}
E se eu quiser executar uma ação enquanto uma tecla específica não for pressionada?
Para esses casos, basta inverter o valor retornado pelo GetKey, da seguinte forma:
using UnityEngine;
public class InputTeclado : MonoBehaviour {
public void Update() {
if (Input.GetKey(KeyCode.A) == false) {
// Esta mensagem será exibida durante todos os
// próximos frames, enquanto a tecla NÃO estiver pressionada
Debug.Log("A tecla A NÃO está pressionada.");
}
}
}
Resumindo:
GetKey informa se a tecla está ou não pressionada.
GetKeyDown informa em qual frame a tecla começou a ser pressionada
GetKeyUp informa em qual frame a tecla deixou de ser pressionada
A utilização dos métodos
GetKey,
GetKeyDown e
GetKeyUp pode ser realizada com conjunto com a classe
KeyCode, que contém um lista de todas as teclas disponíveis no teclado.
Gostou? Comenta aí!
Comentários
Postar um comentário