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;
float vitesse = 27.4f;

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;
Vector3 position;
GameObject player;

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
player.Respawn(); // pour lancer le code de réapparition du joueur

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;

public class ScriptNom : MonoBehaviour
{
    public string monPrenom = « Fabien »;
    void Start()
    {
       Debug.Log(myName);
    }

void Update()
    {
       Debug.Log(myName);
    }
}

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() {
    /* Du code … */
    int level = 3;
    /* Encore du code … */
}

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;

private void UneFonctionQuelconque() {
    /* Du code … */
    level = 3;
    /* Encore du code … */
}

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};
string[] voitures = {« Volvo », « BMW », « Ford », « Mazda »};

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 » */
voiture[2] /* va renvoyer « Ford » */

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
/*renvoie 4 puisque le tableau voitures contient 4 éléments*/

 

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);
nomDuTableau[aleatoire];

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é!

Dans quel cas tu peux utiliser des variables statiques:
  • 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;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // ne pas oublier pour manipuler du text

public class ScoreScript : MonoBehaviour
{

    public static int scoreValeur = 0; // Un static sera accessible de partout

    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
        {
            Destroy(other.gameObject); // Détruire l’objet qui nous a touché

            if(gameObject.tag == « Projectile ») // nouvelle ligne, cible l’élément qui tue
            {
                ScoreScript.scoreValeur += 10; // désigne le SCRIPT puis le nom de la Variable static
            }
        }

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()
    {
        if (cible == null) // vérifie si l’objet n’existe plus sur la scène
        {
            SceneManager.LoadScene(prochaineScene); // passe à la scène qui porte le nom définie dans prochaineScene.
            ScoreScript.scoreValeur = 0;    // remettre le score à zéro                                   
        }
    }

Perdre / Gagner des points de vie

 

Pour voir comment afficher des Variables ou du Texte à l’écran, se rendre sur la Fiche Ressources Canvas 

Aléatoire (Random)

 
Retour en haut