Énumérations dans l’inspecteur
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 17 sur 50.
Un champ enum s’affiche sous forme de menu déroulant dans l’Inspector, ce qui en fait un moyen pratique de configurer des objets qui partagent un même script. Un prefab Pickup sert pour les pièces, les cœurs et les boucliers : chaque copie dans le niveau tire son type du menu déroulant, et le script effectue un switch sur cette valeur :
public enum PickupKind { Coin, Heart, Shield }
public class Pickup : MonoBehaviour
{
public PickupKind kind;
public int amount = 1;
void OnTriggerEnter(Collider other)
{
if (!other.TryGetComponent(out PlayerStats stats)) return;
switch (kind)
{
case PickupKind.Coin: stats.coins += amount; break;
case PickupKind.Heart: stats.hp += amount; break;
case PickupKind.Shield: stats.shielded = true; break;
}
Destroy(gameObject);
}
}La scène enregistre chaque choix sous forme de numéro : Coin vaut 0, Heart 1, Shield 2. Ajouter une valeur à la fin est sans risque. En insérer une au début, comme dans { Gem, Coin, Heart, Shield }, décale tous les numéros, et chaque pickup de chaque scène change de type. Renommer une valeur est sans risque, car son numéro reste le même. Écrire les numéros explicitement, Coin = 0, Heart = 1, Shield = 2, permet de réordonner les noms plus tard sans modifier les choix enregistrés.
Un enum [System.Flags] contient plusieurs valeurs à la fois. Son menu déroulant comporte une case à cocher par valeur, ainsi que Rien et Tout. Chaque valeur doit avoir son propre bit, les nombres sont donc des puissances de deux :
[System.Flags]
public enum Element { None = 0, Fire = 1, Ice = 2, Poison = 4 }
public Element immuneTo; // cochés dans l’Inspector : Fire et Poison
public void Hit(int damage, Element element)
{
if (immuneTo.HasFlag(element)) return;
hp -= damage;
}| combine des valeurs : Element.Fire | Element.Poison vaut 5. HasFlag(x) vaut true lorsque toutes les valeurs de x sont définies, et ToString() liste les valeurs qui sont définies, sous la forme Fire, Poison.
Défi
FacileLa base a trois portes : le local de stockage nécessite la carte-clé rouge, le laboratoire la bleue et le coffre-fort les deux. Le needs de chaque porte et le card de chaque carte sont définis dans l’Inspector avec l’énumération Access, et Door.cs et Keycard.cs sont prêts. Les flèches déplacent le Player, dont le KeyRing contient les cartes ramassées. Termine KeyRing.cs :
- Fais de
Accessune énumération dont les valeurs peuvent être combinées, afin qu’une porte puisse nécessiter plusieurs cartes et que l’anneau puisse en contenir plusieurs. Garde ses quatre noms : None, Red, Blue et Green. Add(Access card)ajoute une carte à l’anneau, en conservant celles qui s’y trouvent déjà.Opens(Access needs)renvoie true lorsque l’anneau contient toutes les cartes deneeds.
Appuie sur Jouer, essaie les portes, ramasse les cartes, puis appuie sur Vérifier.
Essayez vous-même
using UnityEngine;
public enum Access { None, Red, Blue, Green }
public class KeyRing : MonoBehaviour
{
public Access cards;
public void Add(Access card)
{
// ajoute la carte au trousseau sans retirer celles qui s’y trouvent déjà
}
public bool Opens(Access needs)
{
// vrai lorsque le trousseau contient toutes les cartes indiquées dans needs
return false;
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Architecture de jeu dans Unity
1Des composants, pas des hiérarchies
Des composants simplesUn script de base pour les ennemisDes composants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaire4Données sérialisées
Classes sérialisablesListes dans l’inspecteurÉnumérations dans l’inspecteurRécapitulatif : table de butin7Machines à états
Les états sous forme de classesUne machine à étatsTransitionsLes cerveaux des ennemisRécapitulatif : états d’une porte10Projet : Survivant de l’arène
Le hérosTypes d’ennemis2Interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interaction5ScriptableObjects
Assets de donnéesStatistiques des armesParamètres partagésLes vagues sous forme de donnéesRécapitulatif : base de données d’objets