Variables
Voilà un mot que tu risques de beaucoup croiser dans l’univers de la programmation! Si tu suis les ateliers Unity, il y a de fortes chances que tu aies déjà entendu parler des variables. En effet, les variables ne sont pas utilisées que pour la programmation C#. Presque tous les langages de programmation utilisent des variables!
Dans cette page trouveras :
Qu’est ce qu’une Variable?
Une variable est un outil qui nous permet de stocker de l’information en mémoire!
C’est l’équivalent d’une boîte, qui va contenir la dernière valeur qu’on lui a assigné. L’avantage de la variable, c’est justement qu’elle varie! On peut modifier la valeur qu’elle contient et exécuter des opérations dessus.
int vie = 10;
Cette déclaration va stocker la valeur 10 dans une variable appelée vie. A chaque fois qu’on voudra récupérer la valeur contenue dans vie, il suffira de l’appeler.
string message = « Il te reste actuellement « + vie + » points de vie »;
Tu peux utiliser une variable pour affecter une autre variable! Dans cet exemple, la variable message contient la phrase “Il te reste actuellement X points de vie” avec X remplacé par la valeur contenue dans la variable vie.
Il y a une multitude de façons d’exploiter les variables dans ton code. Cela permet de garder les informations et ne pas dépendre d’un cas particulier. Le programme devrait pouvoir fonctionner sans connaître d’avance le contenu de la variable!
Déclarer une variable
Pour utiliser une variable, tu dois la déclarer. Cela signifie: préciser son type, son nom et sa valeur, de cette manière:
type nom = valeur;
Voici quelques exemples:
int age = 15;
float volume = 0.8f;
string pays = « France »;
Comment nommer tes variables?
Prend l’habitude de nommer tes variables en camelCase, (littéralement casse de chameau) c’est-à-dire tout attaché avec une majuscule uniquement pour séparer les mots. Tu n’as pas le droit d’utiliser des caractères spéciaux comme des accents ou de la ponctuation! Ceci donne:
pouvoir, pouvoirSecondaire, position, pointDeVie, periodeInvincibilite.
La raison pour laquelle c’est bien de prendre l’habitude d’adopter cette convention, c’est qu’elle te permet de plus facilement collaborer avec d’autres développeurs Unity. En effet, si chacun faisait ce qu’il voulait pour nommer une variable, le code deviendrait vite un terrain sans ordres ni règles qu’il serait difficile de s’approprier! Une fois que tu auras maîtrisé toutes ces conventions, tu pourras te sentir à l’aise en lisant le code d’un autre développeur Unity!
Types de variables
Chaque variable stocke un type d’information. Il faut préciser le type au moment de déclarer la variable!
Voici une liste des types de variables supportées par Unity.
Nous allons nous attarder sur les plus importants.
Variables numériques: int et float
int score = 10; |
Les variables les plus courantes dans le jeu vidéo sont les variables numériques! Surtout si tu veux stocker les points, la vie, l’expérience, l’argent, la position, la vitesse…
- int – pour les nombres entiers (integers en anglais), c’est-à-dire les nombres sans virgules.
- float – pour les nombres décimaux (aussi appelés flottants), c’est-à-dire les nombres avec virgule.
Remarque qu’il est nécessaire d’ajouter la lettre f à la fin d’un nombre flottant! Un nombre à virgule sans le petit f à la fin est considéré comme de type double (pareil qu’un nombre flottant mais prend deux fois plus de place dans la mémoire de ton ordi).
Variables textuelles: string
string nom = « Maker »; |
Bien évidemment, tu peux aussi stocker du texte dans une variable en te servant du type string!
Pour une seule lettre, il existe le type char (pour character en anglais)
char lettre = ‘a’; |
Variables non-primitives
Enfin, tu verras souvent dans le code plein d’autres types de variables qui ne sont pas considérés comme primitifs! Ces variables sont en réalité des objets que Unity a créé pour nous pour qu’on puisse les stocker et manipuler
Voici quelques exemples:
Camera camera; |
Tu peux assigner ces objets comme tu le ferais avec une autre variable, et tu peux même faire appel à leurs propres variables et fonctions.
position.x; // pour lire la variable x de l’objet position |
Public ou Private ?
Pour débuter dans le développement de jeu vidéo il est primordial de comprendre la distinction entre des variables qui auront une portée publique ou privée.
Lorsque la variable est « public » elle pourra être consultée ou modifier en dehors de son script c#, si elle est « private » alors vous ne pourrez agir sur cette variable uniquement depuis le script ou elle a été déclarer.
Par défaut si on ne met rien devant la variable elle est Private (donc Privée, c’est à dire cachée et inaccessible dans l’inspector ou depuis un autre script).
On va donc mettre Public devant la variable pour pouvoir la modifier.
using UnityEngine; void Update() |
Ce code crée un champ modifiable dans l’Inspecteur intitulé « Mon Prenom ».
Grâce au deux Debug.Log, l’un créé au Start et l’autre dans l’Update, on peut voir le Prénom s’afficher.
On peut d’ailleurs retrouver ce champs modifiable dans l’Inspector de l’objet qui porte le Script:
Si on modifie en direct la valeur :
Le texte s’actualise dans la Console :
Portée d’une variable
La dernière chose importante à comprendre dans une variable est sa portée! En effet, une variable n’existe que dans le cadre où elle a été déclarée. On délimite ce cadre entre les deux accolades entre lesquelles elle se trouve.
Prenons ce code en exemple. Il y a deux variables qui sont créées: jour et heure. Tu peux voir un trait de couleur qui indique sur le côté pendant combien de temps la variable existe:
- La variable jour est créée au début de la fonction. Elle existe donc jusqu’à ce qu’on atteigne la fermeture de la fonction! C’est pour ça qu’on peut l’utiliser même à l’intérieur de la condition.
- La variable heure, par contre, est créée à l’intérieur de la condition. Elle n’existe donc plus quand on sort de la condition, ce qui explique pourquoi il y a une erreur quand on essaie de l’utiliser après.
La leçon importante à retenir c’est qu’il faut toujours avoir en tête la portée d’une variable quand on la déclare! Une variable arrête d’exister dès lors qu’on atteint l’accolade de fermeture du scope où elle se trouve.
Variables locales
Ce sont les variables que tu déclares dans les fonctions. Elles se déclarent de cette manière.
private void UneFonctionQuelconque() { |
On dit que la variable est locale car elle n’existe que dans la fonction où elle a été déclarée. Une fois sortie de la portée de la fonction, la variable n’existe plus.
Variables globales
A la différence des variables locales, les variables globales existent en dehors d’une fonction. Elles persistent tant que le script est actif, et sont accessibles par toutes les fonctions de ce script.
private int level; |
As-tu remarqué que la variable était d’abord déclarée en dehors de la fonction? C’est ce qui en fait une variable globale! Il faut bien penser à préciser sa visibilité (publique ou privée)
Les tableaux
Bien souvent, tu auras besoin de ranger les éléments de ton jeu dans des collections: lister les ennemis, lister les obstacles, lister les points de sauvegarde…etc. Pour stocker ces listes, nous te recommandons d’utiliser une fonctionnalité très pratique du C#: les tableaux!
Déclarer un tableau
int[] numeros = {10, 20, 30, 40}; |
Ces variables ne stockent pas une mais plusieurs valeurs!
Lire un élement d’un tableau
Pour accéder à un élément du tableau, on utilise son index (numéro représentant la position de l’élément dans le tableau en partant de zéro)
voiture[0] /* va renvoyer « Volvo » */ |
Attention! L’index commence toujours à partir de zéro (et non de un)!
Par exemple, pour le tableau des numéros un peu plus haut:
Obtenir la longueur d’un tableau
Pour compter le nombre d’éléments contenus dans le tableau, on peut utiliser la propriété Length
voitures.Length |
Obtenir un élement aléatoire d’un tableau
On peut utiliser Random.Range() pour obtenir un index entre 0 et le nombre d’éléments du tableau!
int aleatoire = Random.Range(0, nomDuTableau.Length); |
Variable Statique
Il peut arriver que tu tombes sur des variables spéciales qui sont précédées par le mot static. Tu peux ajouter static à n’importe quelle variable globale pour en faire une variable statique. Mais alors? Qu’est-ce que c’est exactement?
La plupart des variables que tu crées sont considérées comme des variables membres. C’est-à-dire qu’elles appartiennent à une instance spécifique. Les variables statiques, quant à elles, appartiennent à la classe en général.
Si tu as une classe Ennemi avec la variable vie, chaque ennemi aura sa propre vie avec une valeur spécifique. Mais si tu en fais une variable statique, tous les ennemis partageront la même vie, peu importe qui a été touché!
- Pour stocker des variables qui sont communes à tous tes objets
- Pour stocker une variable sur la classe en entier plutôt qu’un objet spécifique (exemple: le nombre d’ennemis présents sur la scène)
- Pour stocker une information qui n’a pas besoin d’instance (comme le score)
Créer un Score (Modifier la valeur d’une variable d’un autre Script)
Dans l’exemple qu’on va mettre en place, lorsque les Projectiles du Joueur détruit un Ennemi on gagne 10 Points, à toi de l’adapter à ton projet !
On va créer un UI > Text là où va s’afficher le texte à l’écran. Si tu as besoin d’information concernant la mise en place d’un Texte à l’écran rend toi sur la Fiche Ressources Menu & UI
On va créer un nouveau Script qu’on va nommer “ScoreScript” puis donner ce Script à l’Objet Text qu’on vient de créer à l’instant. Voici le Script :
using System.Collections; public Text Score; // On crée un emplacement de stockage nommé Score de type Text // Start is called before the first frame update void Start() { Score = GetComponent<Text>(); // Récupère le composant Text qui est sur le gameObject Text et on l’associe à Score } // Update is called once per frame void Update() { Score.text = « Score : « + scoreValeur; // La variable scoreValeur associée au Text } } |
Puis dans le Script qui détruit les Ennemies, on va rajouter un if qui précise que si l’élément est détruit par le Projectile alors on ajoute 10 points.
if(other.tag==cible) // pour vérifier que l’objet qu’on souhaite détruire a bien le même tag que celui assigné sur l’inspecteur |
Attention :
Si le tag de l’élément qui détruit les Ennemi se nomme “Epee” ou autre chose adapte ton code !
Et voilà !
Par contre si tu as un Script qui redémarre la scène à la mort du héros ou quelque chose du genre, tu devras remettre le Score à Zéro dans ce Script.
void Update() |
Perdre / Gagner des points de vie
Pour voir comment afficher des Variables ou du Texte à l’écran, se rendre sur la Fiche Ressources Canvas