unity3d
System wejściowy
Szukaj…
Klawisz czytania Naciśnij i różnica między GetKey, GetKeyDown i GetKeyUp
Dane wejściowe muszą zostać odczytane z funkcji aktualizacji.
Odniesienie do wszystkich dostępnych wyliczeń kodu klucza .
1. Czytanie klawisza naciśnij przy pomocy Input.GetKey
:
Input.GetKey
wielokrotnie zwraca wartość true
gdy użytkownik przytrzymuje określony klucz. Można go użyć do wielokrotnego strzelania z broni, przytrzymując określony klawisz. Poniżej znajduje się przykład automatycznego wystrzelenia pocisku, gdy klawisz spacji jest wciśnięty. Gracz nie musi naciskać i zwalniać klawisza w kółko.
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. Czytanie naciśnij klawisz z Input.GetKeyDown
:
Input.GetKeyDown
będzie prawdą tylko raz po naciśnięciu określonego klawisza. Jest to kluczowa różnica między Input.GetKey
a Input.GetKeyDown
. Jednym z przykładowych zastosowań jego zastosowania jest włączanie / wyłączanie interfejsu użytkownika, latarki lub elementu.
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. Czytanie naciśnij klawisz z Input.GetKeyUp
:
Jest to dokładne przeciwieństwo Input.GetKeyDown
. Służy do wykrywania, kiedy naciśnięcie klawisza jest zwolnione / podniesione. Podobnie jak Input.GetKeyDown
, zwraca true
tylko raz . Na przykład, możesz enable
światło, gdy klawisz jest wciśnięty za pomocą Input.GetKeyDown
a następnie wyłączyć światło, gdy klawisz jest zwolniony za pomocą 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!");
}
}
Odczytaj czujnik przyspieszenia (podstawowy)
Input.acceleration
służy do odczytu czujnika przyspieszenia. Zwraca Vector3
który zawiera wartości osi x
, y
i z
w przestrzeni 3D.
void Update()
{
Vector3 acclerometerValue = rawAccelValue();
Debug.Log("X: " + acclerometerValue.x + " Y: " + acclerometerValue.y + " Z: " + acclerometerValue.z);
}
Vector3 rawAccelValue()
{
return Input.acceleration;
}
Czytaj Czujnik przyspieszenia (Advance)
Używanie surowych wartości bezpośrednio z czujnika przyspieszenia do przesuwania lub obracania GameObject może powodować problemy, takie jak gwałtowne ruchy lub wibracje. Zaleca się wygładzenie wartości przed ich użyciem. W rzeczywistości wartości z czujnika przyspieszenia powinny być zawsze wygładzone przed użyciem. Można to osiągnąć za pomocą filtra dolnoprzepustowego i Vector3.Lerp
pojawia się Vector3.Lerp
.
//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;
}
Czytaj Czujnik przyspieszenia (precyzja)
Dokładnie odczytaj czujnik przyspieszenia.
Ten przykład przydziela pamięć:
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;
}
Ten przykład nie przydziela pamięci:
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;
}
Pamiętaj, że to nie jest filtrowane. Sprawdź tutaj, jak wygładzić wartości akcelerometru w celu usunięcia hałasu.
Czytaj Kliknięcia przycisku myszy (lewy, środkowy, prawy)
Te funkcje służą do sprawdzania kliknięć przycisków myszy.
-
Input.GetMouseButton(int button);
-
Input.GetMouseButtonDown(int button);
-
Input.GetMouseButtonUp(int button);
Wszystkie przyjmują ten sam parametr.
- 0 = lewy przycisk myszy.
- 1 = prawy przycisk myszy.
- 2 = środkowe kliknięcie myszą.
GetMouseButton
służy do wykrywania, kiedy przycisk myszy jest ciągle przytrzymywany . Zwraca wartość true
podczas przytrzymywania określonego przycisku myszy.
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
służy do wykrywania kliknięcia myszą. Zwraca wartość true
jeśli zostanie naciśnięty raz . Nie zwróci ponownie true
dopóki przycisk myszy nie zostanie zwolniony i ponownie naciśnięty.
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
służy do wykrywania, kiedy zwolniony zostanie określony przycisk myszy. Zwróci to wartość true
dopiero po zwolnieniu określonego przycisku myszy. Aby ponownie uzyskać wartość true, należy ją ponownie nacisnąć i zwolnić.
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");
}
}