Buscar..


Leyendo la lectura de teclas y la diferencia entre GetKey, GetKeyDown y GetKeyUp

La entrada debe leer desde la función Actualizar.

Referencia para todas las enumeración de Keycode disponible.

1. Leyendo la tecla presionando con Input.GetKey :

Input.GetKey devolverá repetidamente true mientras el usuario mantiene presionada la tecla especificada. Se puede usar para disparar repetidamente un arma mientras se mantiene presionada la tecla especificada. A continuación se muestra un ejemplo de disparo automático de bala cuando se mantiene presionada la tecla de espacio. El jugador no tiene que presionar y soltar la tecla una y otra vez.

public GameObject bulletPrefab;
public float shootForce = 50f;

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        Debug.Log("Shooting a bullet while SpaceBar is held down");

        //Instantiate bullet
        GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation) as GameObject;

        //Get the Rigidbody from the bullet then add a force to the bullet
        bullet.GetComponent<Rigidbody>().AddForce(bullet.transform.forward * shootForce);
    }
}

2. Tecla de lectura presionando con Input.GetKeyDown :

Input.GetKeyDown solo se cumplirá una vez cuando se presione la tecla especificada. Esta es la diferencia clave entre Input.GetKey y Input.GetKeyDown . Un ejemplo de uso de su uso es para activar / desactivar una IU o una linterna o un elemento.

public Light flashLight;
bool enableFlashLight = false;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        //Toggle Light 
        enableFlashLight = !enableFlashLight;
        if (enableFlashLight)
        {
            flashLight.enabled = true;
            Debug.Log("Light Enabled!");
        }
        else
        {
            flashLight.enabled = false;
            Debug.Log("Light Disabled!");
        }
    }
}

3. Pulsando la tecla de Input.GetKeyUp con Input.GetKeyUp :

Esto es exactamente lo contrario de Input.GetKeyDown . Se utiliza para detectar cuándo se presiona / levanta la pulsación de tecla. Al igual que Input.GetKeyDown , devuelve true solo una vez . Por ejemplo, puede enable luz cuando la tecla se mantiene presionada con Input.GetKeyDown luego deshabilitar la luz cuando se suelta la tecla con Input.GetKeyUp .

public Light flashLight;
void Update()
{
    //Disable Light when Space Key is pressed
    if (Input.GetKeyDown(KeyCode.Space))
    {
        flashLight.enabled = true;
        Debug.Log("Light Enabled!");
    }

    //Disable Light when Space Key is released
    if (Input.GetKeyUp(KeyCode.Space))
    {
        flashLight.enabled = false;
        Debug.Log("Light Disabled!");
    }
}

Sensor de acelerómetro de lectura (básico)

Input.acceleration se utiliza para leer el sensor del acelerómetro. Devuelve Vector3 como un resultado que contiene los valores de los ejes x , y y z en el espacio 3D.

void Update()
{
    Vector3 acclerometerValue = rawAccelValue();
    Debug.Log("X: " + acclerometerValue.x + "  Y: " + acclerometerValue.y + "  Z: " + acclerometerValue.z);
}

Vector3 rawAccelValue()
{
    return Input.acceleration;
}

Lea el sensor del acelerómetro (avance)

El uso de valores brutos directamente desde el sensor del acelerómetro para mover o rotar un GameObject puede causar problemas como movimientos bruscos o vibraciones. Se recomienda suavizar los valores antes de usarlos. De hecho, los valores del sensor del acelerómetro siempre se deben suavizar antes de usarlos. Esto se puede lograr con un filtro de paso bajo y aquí es donde Vector3.Lerp entra en su lugar.

//The lower this value, the less smooth the value is and faster Accel is updated. 30 seems fine for this
const float updateSpeed = 30.0f;

float AccelerometerUpdateInterval = 1.0f / updateSpeed;
float LowPassKernelWidthInSeconds = 1.0f;
float LowPassFilterFactor = 0;
Vector3 lowPassValue = Vector3.zero;

void Start()
{
    //Filter Accelerometer
    LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds;
    lowPassValue = Input.acceleration;
}

void Update()
{

    //Get Raw Accelerometer values (pass in false to get raw Accelerometer values)
    Vector3 rawAccelValue = filterAccelValue(false);
    Debug.Log("RAW X: " + rawAccelValue.x + "  Y: " + rawAccelValue.y + "  Z: " + rawAccelValue.z);

    //Get smoothed Accelerometer values (pass in true to get Filtered Accelerometer values)
    Vector3 filteredAccelValue = filterAccelValue(true);
    Debug.Log("FILTERED X: " + filteredAccelValue.x + "  Y: " + filteredAccelValue.y + "  Z: " + filteredAccelValue.z);
}

//Filter Accelerometer
Vector3 filterAccelValue(bool smooth)
{
    if (smooth)
        lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
    else
        lowPassValue = Input.acceleration;

    return lowPassValue;
}

Sensor de acelerómetro de lectura (precisión)

Lea el sensor del acelerómetro con precisión.

Este ejemplo asigna memoria:

void Update()
{
    //Get Precise Accelerometer values 
    Vector3 accelValue = preciseAccelValue();
    Debug.Log("PRECISE X: " + accelValue.x + "  Y: " + accelValue.y + "  Z: " + accelValue.z);

}

Vector3 preciseAccelValue()
{
    Vector3 accelResult = Vector3.zero;
    foreach (AccelerationEvent tempAccelEvent in Input.accelerationEvents)
    {
        accelResult = accelResult + (tempAccelEvent.acceleration * tempAccelEvent.deltaTime);
    }
    return accelResult;
}

Este ejemplo no asigna memoria:

void Update()
{
    //Get Precise Accelerometer values 
    Vector3 accelValue = preciseAccelValue();
    Debug.Log("PRECISE X: " + accelValue.x + "  Y: " + accelValue.y + "  Z: " + accelValue.z);

}

Vector3 preciseAccelValue()
{
    Vector3 accelResult = Vector3.zero;
    for (int i = 0; i < Input.accelerationEventCount; ++i)
    {
        AccelerationEvent tempAccelEvent = Input.GetAccelerationEvent(i);
        accelResult = accelResult + (tempAccelEvent.acceleration * tempAccelEvent.deltaTime);
    }
    return accelResult;
}

Tenga en cuenta que esto no se filtra. Consulte aquí cómo suavizar los valores del acelerómetro para eliminar el ruido.

Haga clic en el botón del mouse (izquierda, central, derecha) Clics

Estas funciones se utilizan para comprobar los clics del botón del ratón.

  • Input.GetMouseButton(int button);
  • Input.GetMouseButtonDown(int button);
  • Input.GetMouseButtonUp(int button);

Todos toman el mismo parámetro.

  • 0 = Clic izquierdo del ratón.
  • 1 = clic derecho del ratón.
  • 2 = clic medio del ratón.

GetMouseButton se usa para detectar cuándo se mantiene presionado el botón del mouse. Devuelve true mientras se mantiene presionado el botón del mouse especificado.

void Update()
{
    if (Input.GetMouseButton(0))
    {
        Debug.Log("Left Mouse Button Down");
    }

    if (Input.GetMouseButton(1))
    {
        Debug.Log("Right Mouse Button Down");
    }

    if (Input.GetMouseButton(2))
    {
        Debug.Log("Middle Mouse Button Down");
    }
}

GetMouseButtonDown se usa para detectar cuándo hay un clic del mouse. Devuelve true si se presiona una vez . No volverá a ser true hasta que se suelte el botón del mouse y se presione nuevamente.

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Debug.Log("Left Mouse Button Clicked");
    }

    if (Input.GetMouseButtonDown(1))
    {
        Debug.Log("Right Mouse Button Clicked");
    }

    if (Input.GetMouseButtonDown(2))
    {
        Debug.Log("Middle Mouse Button Clicked");
    }
}

GetMouseButtonUp se utiliza para detectar cuándo se suelta el botón de mouse específico. Esto solo se devolverá true una vez que se suelte el botón del mouse especificado. Para devolver el valor verdadero nuevamente, se debe presionar y soltar nuevamente.

void Update()
{
    if (Input.GetMouseButtonUp(0))
    {
        Debug.Log("Left Mouse Button Released");
    }

    if (Input.GetMouseButtonUp(1))
    {
        Debug.Log("Right Mouse Button Released");
    }

    if (Input.GetMouseButtonUp(2))
    {
        Debug.Log("Middle Mouse Button Released");
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow