Menu
CoddyTech

Clavier et souris

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 44 sur 56.

Le système Input System attribue un objet à chaque périphérique. Keyboard.current est le clavier, et chaque touche est un contrôle portant un nom : spaceKey, aKey, upArrowKey, ou Keyboard.current[Key.Space] pour accéder à n’importe quelle touche par sa valeur Key. Mouse.current est la souris, avec leftButton, rightButton et position. La propriété isPressed d’un contrôle vaut true à chaque image où il est maintenu enfoncé, comme c’était le cas avec Input.GetKey. Ce sous-marin plonge et remonte avec les flèches et allume son projecteur tant que le bouton de la souris est maintenu enfoncé :

using UnityEngine;
using UnityEngine.InputSystem;

public class Submarine : MonoBehaviour
{
    public float diveSpeed = 2f;
    public Light searchlight;

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard == null) return;   // aucun clavier connecté

        if (keyboard.downArrowKey.isPressed)
            transform.position += Vector3.down * diveSpeed * Time.deltaTime;
        if (keyboard.upArrowKey.isPressed)
            transform.position += Vector3.up * diveSpeed * Time.deltaTime;

        searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
    }
}

current est le périphérique utilisé en dernier, et vaut null lorsqu’il n’y en a aucun : un téléphone ou une console peut ne pas avoir de clavier, et les vérifications de nullité empêchent le script de provoquer une exception dans ce cas. Le clavier n’a pas d’axes, donc la flèche vers le bas et S sont deux touches distinctes : pour qu’un sous-marin plonge aussi avec S, on teste keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() renvoie la position du pointeur sous forme de Vector2, en pixels à l’écran à partir du coin inférieur gauche, comme Input.mousePosition.

challenge icon

Défi

Moyen

Fais voler la montgolfière avec l’Input System. Son script contient drift (2), rise (3), sink (1), groundY (2) et flame, la flamme du brûleur sous le ballon.

  • Lorsque la flèche droite ou D est maintenue enfoncée, le ballon dérive vers la droite (le long de +x) à drift unités par seconde ; lorsque la flèche gauche ou A est maintenue enfoncée, il dérive vers la gauche.
  • Le brûleur est allumé tant que la barre d’espace ou le bouton gauche de la souris est maintenu enfoncé. Affiche flame uniquement lorsqu’il est allumé.
  • Lorsque le brûleur est allumé, le ballon monte à rise unités par seconde. Lorsqu’il est éteint, il descend à sink unités par seconde, sans jamais descendre sous groundY.

Utilise Keyboard.current et Mouse.current. Ce projet est configuré comme un nouveau projet Unity 6 (Active Input Handling: Input System Package) ; la classe Input déclenche donc ici une InvalidOperationException. Appuie sur Play et fais voler le ballon, puis clique sur Check.

Essayez vous-même

using UnityEngine;
using UnityEngine.InputSystem;

public class Balloon : MonoBehaviour
{
    public float drift = 2f;
    public float rise = 3f;
    public float sink = 1f;
    public float groundY = 2f;
    public GameObject flame;

    void Update()
    {
        // Dérive avec les flèches ou A et D, active la flamme avec Space ou la souris
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Créer de vrais jeux