Actions d’entrée
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 47 sur 60.
Tester les touches une par une lie un script au clavier. Une action désigne plutôt ce que fait le joueur, et le projet indique quelles touches, quels sticks et quels boutons la déclenchent. Un nouveau projet Unity 6 est livré avec un ensemble d’actions (l’asset InputSystem_Actions, défini comme ensemble d’actions à l’échelle du projet), dont la map Player contient 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 inférieur 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 saisit 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, et conservées dans des champs InputAction. Move fournit un Vector2 : x correspond à droite et à gauche, y à haut et bas sur les touches, et le vecteur est normalisé, donc W et D ensemble donnent (0.71, 0.71) plutôt que (1, 1). La grue est en vue latérale, donc elle utilise y pour la hauteur ; un jeu vu de dessus l’utiliserait pour z. Les actions de bouton répondent 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 fournit un Vector2.
Défi
MoyenDéplace le géomètre et plante des drapeaux à l’aide des actions du projet.
- Dans
Start(), définismoveAction,jumpActionetattackActionavecInputSystem.actions.FindAction("Move"),"Jump"et"Attack". - Dans
Update(), déplace-toi en multipliantmoveAction.ReadValue<Vector2>()parspeed, en utilisant sa coordonnée y pour l’axe z. - Appelle
Plant()lorsquejumpAction.WasPressedThisFrame()est activée, etPullUp()lorsque la touche Attaque est enfoncée.
Appuie sur « Jouer », plante trois drapeaux, puis clique pour en retirer un. Ensuite, appuie sur « Vérifier ».
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 InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// trouver les actions Move, Jump et Attack
}
void Update()
{
// se déplacer avec Move, appeler Plant() lors d’un appui sur Jump et PullUp() lors d’un appui sur Attack
}
void Plant()
{
if (flags == 0) return;
Vector3 spot = new Vector3(transform.position.x, 0.75f, transform.position.z);
planted.Add(Instantiate(flagPrefab, spot, Quaternion.identity));
flags--;
Debug.Log("Flags left: " + flags);
}
void PullUp()
{
if (planted.Count == 0) return;
GameObject last = planted[planted.Count - 1];
planted.RemoveAt(planted.Count - 1);
Destroy(last);
flags++;
Debug.Log("Flags left: " + flags);
}
}
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