Recherche…


Clé de lecture Appui et différence entre GetKey, GetKeyDown et GetKeyUp

L'entrée doit lire depuis la fonction de mise à jour.

Référence pour tous les énumérations Keycode disponibles.

1. Appuyez sur la touche avec Input.GetKey :

Input.GetKey plusieurs fois true si l'utilisateur maintient la touche spécifiée. Cela peut être utilisé pour tirer à plusieurs reprises une arme tout en maintenant la touche spécifiée. Vous trouverez ci-dessous un exemple de déclenchement automatique de la puce lorsque la touche Espace est enfoncée. Le joueur n'a pas besoin d'appuyer et de relâcher la touche encore et encore.

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. Appuyez sur la touche avec Input.GetKeyDown :

Input.GetKeyDown ne sera vrai qu'une fois lorsque la touche spécifiée est pressée. C'est la différence clé entre Input.GetKey et Input.GetKeyDown . Un exemple d'utilisation de cette utilisation est d'activer / désactiver une interface utilisateur ou une lampe de poche ou un élément.

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. Appuyez sur la touche avec Input.GetKeyUp :

C'est l'exact opposé de Input.GetKeyDown . Il est utilisé pour détecter le relâchement / le relâchement de la pression d'une touche. Tout comme Input.GetKeyDown , il ne retourne true qu'une seule fois . Par exemple, vous pouvez enable lumière lorsque la touche est enfoncée avec Input.GetKeyDown puis désactiver la lumière lorsque la clé est libérée avec 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!");
    }
}

Capteur d'accéléromètre de lecture (Basic)

Input.acceleration est utilisée pour lire le capteur de l'accéléromètre. Il renvoie Vector3 qui contient les valeurs des axes x , y et z dans un espace 3D.

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

Vector3 rawAccelValue()
{
    return Input.acceleration;
}

Capteur d'accéléromètre de lecture (avance)

L'utilisation de valeurs brutes directement à partir du capteur de l'accéléromètre pour déplacer ou faire pivoter un objet GameObject peut entraîner des problèmes tels que des mouvements saccadés ou des vibrations. Il est recommandé de lisser les valeurs avant de les utiliser. En fait, les valeurs du capteur de l'accéléromètre doivent toujours être lissées avant utilisation. Cela peut être accompli avec un filtre passe-bas et c'est là que Vector3.Lerp entre en place.

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

Capteur d'accéléromètre de lecture (précision)

Lisez le capteur de l'accéléromètre avec précision.

Cet exemple alloue de la mémoire:

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

Cet exemple n'alloue pas de mémoire:

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

Notez que cela n'est pas filtré. S'il vous plaît regardez ici comment lisser les valeurs de l'accéléromètre pour supprimer le bruit.

Cliquez sur le bouton de la souris (gauche, milieu, droite)

Ces fonctions sont utilisées pour vérifier les clics du bouton de la souris.

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

Ils prennent tous le même paramètre.

  • 0 = clic gauche de la souris.
  • 1 = Clic droit de la souris.
  • 2 = Clic de souris du milieu.

GetMouseButton est utilisé pour détecter quand le bouton de la souris est maintenu enfoncé. Il renvoie true lorsque le bouton de la souris spécifié est maintenu enfoncé.

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 est utilisé pour détecter le clic de souris. Il retourne true s'il est pressé une fois . Il ne reviendra pas true jusqu'à ce que le bouton de la souris est relâché et appuyez à nouveau.

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 est utilisé pour détecter le moment où le bouton de la souris spécifié est libéré. Cela ne renverra true lorsque le bouton de la souris spécifié sera relâché. Pour revenir à nouveau, il faut appuyer à nouveau et relâcher.

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow