Actions d’entrée
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 46 sur 56.
Tester les touches une par une lie un script au clavier. Une action nomme plutôt ce que fait le joueur, et le projet répertorie les touches, les sticks et les boutons qui la déclenchent. Un nouveau projet Unity 6 est livré avec un ensemble d’actions (l’asset InputSystem_Actions, défini comme actions à l’échelle du projet), dont la carte Player comporte Move (WASD, les flèches et le stick gauche d’une manette), Look (la souris ou le stick droit), Attack (le bouton gauche de la souris et Entrée), Interact (E, maintenue), Crouch (C), Jump (Espace et le bouton sud de la manette), Previous et Next (1 et 2) et Sprint (Maj gauche). Elles sont activées dès le départ, et InputSystem.actions.FindAction("Jump") permet d’en récupérer une par son nom. Cette grue à pince en vue latérale se déplace sur les axes x et y et attrape avec Jump :
using UnityEngine;
using UnityEngine.InputSystem;
public class ClawCrane : MonoBehaviour
{
public float speed = 3f;
private InputAction moveAction;
private InputAction jumpAction;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
jumpAction = InputSystem.actions.FindAction("Jump");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;
if (jumpAction.WasPressedThisFrame())
Debug.Log("Grab!");
}
}Les actions sont récupérées une seule fois, dans Start, puis conservées dans des champs InputAction. Move renvoie un Vector2 : x correspond à droite et gauche, y à haut et bas sur les touches, et la valeur est normalisée. Ainsi, W et D ensemble renvoient (0.71, 0.71) plutôt que (1, 1). La grue est en vue latérale, elle utilise donc cet axe y pour la hauteur ; un jeu vu de dessus l’utiliserait pour z. Les actions de bouton se comportent comme les touches : WasPressedThisFrame(), WasReleasedThisFrame() et IsPressed(). Deux erreurs provoquent une exception : un nom mal orthographié fait renvoyer null à FindAction (une NullReferenceException à la première lecture), et ReadValue<Vector3>() sur Move provoque une InvalidOperationException dès qu’une touche est maintenue, car Move contient un Vector2.
Défi
MoyenL’arpenteur cartographie un champ de neige vu de dessus et transporte des flags (3) à planter en chemin. Le script contient speed (4), flags, flagPrefab et une liste planted. Utilise les actions du projet :
- Move déplace l’arpenteur sur la neige à raison de
speedunités par seconde : vers la droite et la gauche le long de x, vers le haut et le bas le long de z. - Chaque pression sur Jump plante un drapeau : une copie de
flagPrefabaux coordonnées x et z de l’arpenteur, à y 0.75, ajoutée àplanted. Cela consomme un desflagset affiche le nombre restant, par exempleFlags left: 2. S’il ne reste aucun drapeau, Jump n’en plante aucun. - Chaque pression sur Attack (un clic gauche) récupère le dernier drapeau planté : il est détruit et retiré de la liste,
flagsaugmente d’une unité et la même ligne est affichée.
Appuie sur Play, plante trois drapeaux et récupère-en un, puis clique sur Check.
Essayez vous-même
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Surveyor : MonoBehaviour
{
public float speed = 4f;
public int flags = 3;
public GameObject flagPrefab;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// trouver les actions Move, Jump et Attack
}
void Update()
{
// se déplacer avec Move, planter un drapeau avec Jump et en retirer un avec Attack
}
}
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
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 niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons 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 : 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ée