Sök…


Läsknapp Tryck och skillnaden mellan GetKey, GetKeyDown och GetKeyUp

Ingången måste läsa från uppdateringsfunktionen.

Referens för alla tillgängliga Keycode enum.

1. Input.GetKey läsningsknappen med Input.GetKey :

Input.GetKey kommer upprepade gånger att returnera true medan användaren håller ner den angivna nyckeln. Detta kan användas för att upprepade gånger avfyra ett vapen medan du håller ner den angivna nyckeln. Nedan visas ett exempel på automatisk eldspruta när mellanslagstangenten hålls nere. Spelaren behöver inte trycka och släppa tangenten om och om igen.

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. Läs-knapptryckning med Input.GetKeyDown :

Input.GetKeyDown kommer bara att gälla en gång när den angivna tangenten trycks ned. Detta är nyckelskillnaden mellan Input.GetKey och Input.GetKeyDown . Ett exempel på dess användning är att växla ett gränssnitt eller ficklampa eller ett objekt på / av.

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 .Reading knapptryckning med Input.GetKeyUp :

Det här är Input.GetKeyDown motsatsen till Input.GetKeyDown . Det används för att upptäcka när knapptryckning släpps / lyfts. Precis som Input.GetKeyDown returneras true endast en gång. Du kan till exempel enable ljus när tangenten hålls nere med Input.GetKeyDown sedan inaktivera ljuset när tangenten släpps med 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!");
    }
}

Läs Accelerometer Sensor (Basic)

Input.acceleration används för att läsa accelerationsmätarsensorn. Det returnerar Vector3 som ett resultat som innehåller x , y och z axelvärden i 3D-rymden.

void Update()
{
    Vector3 acclerometerValue = rawAccelValue();
    Debug.Log("X: " + acclerometerValue.x + "  Y: " + acclerometerValue.y + "  Z: " + acclerometerValue.z);
}

Vector3 rawAccelValue()
{
    return Input.acceleration;
}

Läs Accelerometer Sensor (Advance)

Om du använder råvärden direkt från accelerometersensorn för att flytta eller rotera ett GameObject kan det orsaka problem som ryckiga rörelser eller vibrationer. Det rekommenderas att jämna ut värdena innan du använder dem. I själva verket bör värden från accelerometer-sensorn alltid slätas ut före användning. Detta kan åstadkommas med ett lågpassfilter och det är här Vector3.Lerp kommer på plats.

//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;
}

Läs Accelerometer Sensor (Precision)

Läs accelerometersensorn med precision.

Detta exempel tilldelar minne:

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

Detta exempel inte allokerar minne:

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

Observera att detta inte filtreras. Titta här för att jämna ut accelerometervärden för att ta bort brus.

Läs musknapp (vänster, mitten, höger) klick

Dessa funktioner används för att kontrollera musknappklick.

  • Input.GetMouseButton(int button);
  • Input.GetMouseButtonDown(int button);
  • Input.GetMouseButtonUp(int button);

De tar alla samma parameter.

  • 0 = Vänster musklick.
  • 1 = Höger musklick.
  • 2 = Mellan musklick.

GetMouseButton används för att upptäcka när musknappen kontinuerligt hålls nere. Det återgår true medan den angivna musknappen hålls intryckt.

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 används för att upptäcka när det finns musklick. Det återgår true om det trycks en gång . Det kommer inte att true igen förrän musknappen släpps och trycks ned igen.

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 används för att upptäcka när den specificerade musknappen släpps. Detta kommer bara att true när den angivna musknappen släpps. För att återge sanningen måste den tryckas på och släppas igen.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow