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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow