unity3d
Sistema di input
Ricerca…
Lettura della chiave Stampa e differenza tra GetKey, GetKeyDown e GetKeyUp
L'input deve essere letto dalla funzione di aggiornamento.
Riferimento per tutti i codici di accesso disponibili.
1. Leggere il tasto premere con Input.GetKey
:
Input.GetKey
restituirà ripetutamente true
mentre l'utente tiene premuto il tasto specificato. Questo può essere usato per sparare ripetutamente un'arma tenendo premuto il tasto specificato. Di seguito è riportato un esempio di attivazione automatica dei proiettili quando viene tenuto premuto il tasto Spazio. Il giocatore non deve premere e rilasciare il tasto più e più volte.
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. Premere la pressione del tasto con Input.GetKeyDown
:
Input.GetKeyDown
sarà true solo una volta quando viene premuto il tasto specificato. Questa è la differenza chiave tra Input.GetKey
e Input.GetKeyDown
. Un esempio di utilizzo del suo utilizzo è l'attivazione / disattivazione di un'interfaccia utente o di una torcia elettrica o di 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. Premere la pressione del tasto con Input.GetKeyUp
:
Questo è l'esatto opposto di Input.GetKeyDown
. È usato per rilevare quando il tasto-pressione viene rilasciato / sollevato. Proprio come Input.GetKeyDown
, restituisce true
solo una volta . Ad esempio, è possibile enable
luce quando si tiene premuto il tasto con Input.GetKeyDown
quindi disabilitare la luce quando viene rilasciato il tasto 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!");
}
}
Leggi sensore accelerometro (base)
Input.acceleration
viene utilizzato per leggere il sensore dell'accelerometro. Restituisce Vector3
come risultato che contiene i valori dell'asse x
, y
e z
nello spazio 3D.
void Update()
{
Vector3 acclerometerValue = rawAccelValue();
Debug.Log("X: " + acclerometerValue.x + " Y: " + acclerometerValue.y + " Z: " + acclerometerValue.z);
}
Vector3 rawAccelValue()
{
return Input.acceleration;
}
Leggi sensore accelerometro (Advance)
L'uso di valori grezzi direttamente dal sensore dell'accelerometro per spostare o ruotare un oggetto GameObject può causare problemi quali movimenti a scatti o vibrazioni. Si consiglia di appianare i valori prima di utilizzarli. In effetti, i valori dal sensore dell'accelerometro dovrebbero essere sempre livellati prima dell'uso. Questo può essere ottenuto con un filtro passa-basso ed è qui che Vector3.Lerp
entra in azione.
//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;
}
Leggi sensore accelerometro (precisione)
Leggere l'accelerometro Sensore con precisione.
Questo esempio alloca la 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;
}
Questo esempio non alloca la 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;
}
Si noti che questo non è filtrato. Si prega di guardare qui per come regolare i valori dell'accelerometro per rimuovere il rumore.
Leggi il pulsante del mouse (sinistra, metà, destra) Clic
Queste funzioni sono utilizzate per controllare i clic del pulsante del mouse.
-
Input.GetMouseButton(int button);
-
Input.GetMouseButtonDown(int button);
-
Input.GetMouseButtonUp(int button);
Prendono tutti lo stesso parametro.
- 0 = Clic del mouse sinistro.
- 1 = tasto destro del mouse.
- 2 = clic del mouse centrale.
GetMouseButton
viene utilizzato per rilevare quando il pulsante del mouse viene tenuto premuto continuamente . Restituisce true
mentre il pulsante del mouse specificato viene tenuto premuto.
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
viene utilizzato per rilevare quando c'è il clic del mouse. Restituisce true
se viene premuto una volta . Non ritorna più true
fino a quando il pulsante del mouse non viene rilasciato e premuto di nuovo.
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
viene utilizzato per rilevare quando viene rilasciato il pulsante del mouse specificato. Questo è restituito solo true
una volta rilasciato il pulsante del mouse specificato. Per tornare di nuovo vero, deve essere premuto e rilasciato di nuovo.
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");
}
}