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.
Défi
MoyenFais voler la montgolfière avec Keyboard.current et Mouse.current.
- Lorsque
rightArrowKeyoudKeyestisPressed, dérive le long de +x à une vitesse dedriftunités par seconde ; avecleftArrowKeyouaKey, le long de -x. bool burnervautspaceKeyouleftButtonenfoncé ; appelleflame.SetActive(burner);.- Brûleur allumé, monte à la vitesse de
rise; éteint, descends à la vitesse desink, sans jamais descendre sousgroundY.
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
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banque3Le gestionnaire du jeu
Un seul script gère le jeuLe SingletonLes états du jeuBasculer selon l’étatRécapitulatif : gestionnaire de manche6Projet : jeu de course sans fin
Trois voiesObstacles en vue9Le nouveau système d’entrée
Deux systèmes d’entréeClavier et sourisAppuyé pendant cette frameActions d’entréeRécapitulatif : changement de système d’entréeEntraînez-vous par vous-même : Playground Unity