unity3d
Invoersysteem
Zoeken…
Lezen van toetsdruk en verschil tussen GetKey, GetKeyDown en GetKeyUp
Input moet lezen van de update-functie.
Referentie voor alle beschikbare Keycode enum.
1. Lezen van toetsdruk met Input.GetKey
:
Input.GetKey
zal herhaaldelijk true
retourneren terwijl de gebruiker de opgegeven sleutel ingedrukt houdt. Dit kan worden gebruikt om herhaaldelijk een wapen af te vuren terwijl je de opgegeven sleutel ingedrukt houdt. Hieronder ziet u een voorbeeld van automatisch schieten met kogel wanneer u de spatiebalk ingedrukt houdt. De speler hoeft de toets niet steeds opnieuw in te drukken en los te laten.
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. Lezen van toetsdruk met Input.GetKeyDown
:
Input.GetKeyDown
zal slechts eenmaal waar zijn wanneer de opgegeven toets wordt ingedrukt. Dit is het belangrijkste verschil tussen Input.GetKey
en Input.GetKeyDown
. Een voorbeeld van het gebruik ervan is om een UI of zaklamp of een item aan / uit te zetten.
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. Lezen van toetsdruk met Input.GetKeyUp
:
Dit is precies het tegenovergestelde van Input.GetKeyDown
. Het wordt gebruikt om te detecteren wanneer een toets wordt losgelaten / opgeheven. Net als Input.GetKeyDown
, keert het true
slechts een keer. U kunt bijvoorbeeld licht enable
wanneer de toets wordt ingedrukt met Input.GetKeyDown
vervolgens het licht uitschakelen wanneer de sleutel wordt losgelaten met 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!");
}
}
Versnellingsmetersensor lezen (basis)
Input.acceleration
wordt gebruikt om de accelerometer sensor te lezen. Het retourneert Vector3
als een resultaat dat x
, y
en z
aswaarden in 3D-ruimte bevat.
void Update()
{
Vector3 acclerometerValue = rawAccelValue();
Debug.Log("X: " + acclerometerValue.x + " Y: " + acclerometerValue.y + " Z: " + acclerometerValue.z);
}
Vector3 rawAccelValue()
{
return Input.acceleration;
}
Versnellingsmetersensor lezen (vooruit)
Het gebruik van ruwe waarden rechtstreeks vanuit de versnellingsmeter-sensor om een GameObject te verplaatsen of te roteren, kan problemen veroorzaken zoals schokkerige bewegingen of trillingen. Het wordt aanbevolen om de waarden glad te strijken voordat u ze gebruikt. Waarden van de versnellingsmetersensor moeten eigenlijk altijd worden afgevlakt voor gebruik. Dit kan worden bereikt met een laagdoorlaatfilter en dit is waar Vector3.Lerp
op zijn plaats komt.
//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;
}
Versnellingsmetersensor lezen (precisie)
Lees de versnellingsmeter-sensor nauwkeurig af.
In dit voorbeeld wordt geheugen toegewezen:
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;
}
In dit voorbeeld wordt geen geheugen toegewezen:
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;
}
Merk op dat dit niet is gefilterd. Kijk hier hoe u de versnellingsmeterwaarden kunt verzachten om ruis te verwijderen.
Klik met de muisknop (links, midden, rechts)
Deze functies worden gebruikt om klikken op muisknoppen te controleren.
-
Input.GetMouseButton(int button);
-
Input.GetMouseButtonDown(int button);
-
Input.GetMouseButtonUp(int button);
Ze hebben allemaal dezelfde parameter.
- 0 = linker muisklik.
- 1 = Rechter muisklik.
- 2 = middelste muisklik.
GetMouseButton
wordt gebruikt om te detecteren wanneer de muisknop continu wordt ingedrukt. Het geeft true
terug terwijl de opgegeven muisknop wordt ingedrukt.
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
wordt gebruikt om te detecteren wanneer er een muisklik is. Het geeft true
als het eenmaal wordt ingedrukt. Het zal pas weer true
worden als de muisknop wordt losgelaten en opnieuw wordt ingedrukt.
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
wordt gebruikt om te detecteren wanneer de opgegeven muisknop wordt losgelaten. Dit is pas true
als de opgegeven muisknop wordt losgelaten. Om weer waar te worden, moet deze opnieuw worden ingedrukt en losgelaten.
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");
}
}