Menu
CoddyTech

Clavier et souris

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

Le système Input System attribue un objet à chaque périphérique. Keyboard.current correspond au clavier, et chaque touche est une commande dotée d’un nom : spaceKey, aKey, upArrowKey, ou Keyboard.current[Key.Space] pour accéder à une touche à partir de sa valeur Key. Mouse.current correspond à la souris, avec leftButton, rightButton et position. La propriété isPressed d’une commande vaut true à chaque image où elle est maintenue enfoncée, 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 branché

        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 désigne le dernier périphérique utilisé, 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 générer une erreur 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, il faut tester 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 Keyboard.current et Mouse.current.

  1. Lorsque rightArrowKey ou dKey est isPressed, dérive le long de +x à une vitesse de drift unités par seconde ; avec leftArrowKey ou aKey, le long de -x.
  2. bool burner vaut spaceKey ou leftButton enfoncé ; appelle flame.SetActive(burner);.
  3. Brûleur allumé, monte à la vitesse de rise ; éteint, descends à la vitesse de sink, sans jamais descendre sous groundY.

Appuie sur « Jouer » et prends ton envol : maintiens la barre d’espace ou le bouton de la souris enfoncé pour monter. Puis clique sur « Vérifier ».

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

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

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