2012-07-06 31 views
8

Soy muy nuevo en C#. Estoy creando algo en Unity para ayudarme a aprender C# y Unity mejor.C# y Unity3D mientras se está presionando la tecla

Quiero saber por qué:

Input.GetKeyDown(KeyCode.UpArrow)) 

sólo se activa una vez cuando se coloca dentro:

void Update() 

desde la actualización es un bucle, por qué no se disparó mientras mantiene pulsada la tecla (en mi caso haciendo que una esfera se mueva)?

He logrado que funcione usando dos bools que se modifican al presionar y soltar la tecla.

Aquí es mi guión completo que estoy jugando con mover una esfera y simular la aceleración/deceleración:

using UnityEngine; 
using System.Collections; 

public class sphereDriver : MonoBehaviour { 
int x ; 
bool upPressed = false ; 
bool downPressed = false ; 
void Start() 
{ 
    x = 0 ; 
} 

void Update() 
{ 
    if(x > 0) { 
     x -= 1 ; 
    } 
    if(x < 0) { 
     x += 1 ; 
    } 
    if(Input.GetKeyDown(KeyCode.UpArrow)) 
    { 
     upPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.UpArrow)) 
    { 
     upPressed = false ; 
    } 

    if(upPressed == true) 
    { 
     x += 5 ; 
    } 

    if(Input.GetKeyDown(KeyCode.DownArrow)) 
    { 
     downPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.DownArrow)) 
    { 
     downPressed = false ; 
    } 

    if(downPressed == true) 
    { 
     x -= 5 ; 
    } 

    transform.Translate(x * Time.deltaTime/10, 0, 0) ; 
} 

} 

Respuesta

6

El documentation dice que este es el comportamiento normal y esperado.

En su lugar, desea utilizar GetButton o GetAxis, ya que estos indican "presionada" mientras se mantenga presionada la tecla (GetButton devuelve verdadero, GetAxis devuelve 1).

+0

Gracias! Dado que esas dos funciones son unitarias, ¿cómo lo haría originalmente sería lo que más haría para lograr lo que quería en solo C#? – imperium2335

+0

Sí, esta sería una forma común de hacerlo. – redtuna

5

De la documentación en Input.GetKeyDown.

Debe llamar a esta función desde la función Actualizar, ya que el estado se restablece en cada cuadro. No se devolverá verdadero hasta que el usuario haya soltado la tecla y la haya presionado nuevamente.

Este método es más útil para abrir menús u otros eventos únicos. Como continuar el diálogo.

Puede usar los métodos mencionados anteriormente, sin embargo, puede usar Input.GetKey para lograr su objetivo.

Devuelve verdadero mientras el usuario mantiene presionada la tecla identificada por su nombre.

Cuestiones relacionadas