Menu
CoddyTech

Appuyé, maintenu, relâché

Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 19 sur 85.

Unity peut te donner trois informations différentes sur une touche, et chacune est demandée dans Update() :

  • Input.GetKeyDown(KeyCode.Space) : la barre d’espace a-t-elle été pressée pendant cette image ? Le résultat est vrai pendant une seule image par pression.
  • Input.GetKey(KeyCode.Space) : la barre d’espace est-elle enfoncée maintenant ? Le résultat est vrai à chaque image tant que la barre d’espace est maintenue enfoncée.
  • Input.GetKeyUp(KeyCode.Space) : la barre d’espace a-t-elle été relâchée pendant cette image ? Le résultat est vrai pendant une seule image, au moment où la touche est relâchée.

Maintiens la barre d’espace enfoncée pendant une demi-seconde à 60 images par seconde : GetKey renvoie vrai pendant 30 images, GetKeyDown pendant la première, et GetKeyUp pendant l’image qui suit la dernière. Un canon qui tire une fois par pression utilise GetKeyDown ; avec GetKey, une seule pression déclencherait 30 tirs :

public int shots = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        shots++;
        Debug.Log("Shots fired: " + shots);
    }
}

GetKeyUp sert à détecter ce qui se passe lorsque le joueur relâche la touche, par exemple la fin d’un sprint. Les trois ne donnent une réponse que pour l’image actuelle, c’est pourquoi elles doivent être utilisées dans Update() : cette méthode s’exécute à chaque image, tandis que Start() ne s’exécute qu’une fois et manquerait presque toutes les pressions.

challenge icon

Défi

Facile

Le lance-pierre se charge tant que la barre d’espace est maintenue enfoncée et affiche la charge au relâchement.

  1. Dans Update(), tant que Input.GetKey(KeyCode.Space) est vrai, ajoute Time.deltaTime à charge.
  2. Lors de Input.GetKeyUp(KeyCode.Space), affiche "Charge: " + charge dans le journal, puis définis charge sur 0.

Appuie sur « Jouer », maintiens la barre d’espace enfoncée puis relâche-la : la Console affiche une ligne comme Charge: 1.5. Ensuite, clique sur « Vérifier ».

Essayez vous-même

using UnityEngine;

public class Slingshot : MonoBehaviour
{
    float charge = 0f;

    void Update()
    {
        // Tant que Space est maintenue enfoncée : charge augmente de 1 chaque seconde.
        // Quand Space est relâchée : affiche la valeur de charge dans le journal, puis remets-la à 0.
    }
}

Toutes les leçons de Les bases du scripting dans Unity

Entraînez-vous par vous-même : Playground Unity