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");
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow