unity3d
Sistema de entrada
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");
}
}