Les bases du C#
Cette page est de préférence à consulter après la Fiche Ressources Objets et Composants (mais n’hésites pas y revenir pour avoir des précisions sur Composants, notamment concernant les différences entre les jeux 2D et 3D).
Ci-dessous le sommaire des tutos :
Qu’est-ce qu’un script?
Si tu veux contrôler ce qui se passe à l’écran, c’est souvent grâce aux scripts que tu pourras! Avec les scripts, tu vas pouvoir précisément définir le comportement de tes objets, décrire les règles du jeu et établir des interactions entre les éléments de ta scène! Bref, tu es le magicien, et le script est ton incantation!
Prends-le comme étant un composant que tu vas pouvoir personnaliser avec du code!
Un script apparaîtra de cette manière dans tes assets! Tu peux l’ouvrir en double cliquant dessus, ce qui l’ouvrira dans ton éditeur de code (Visual Studio la plupart du temps, sauf si tu en as choisi un autre)
Comment créer un script
Voilà les différentes étapes pour ajouter un script à ton objet:
Sélectionne l’objet sur lequel tu veux ajouter ton script
Clique sur Add Component puis sur New Script
Donne un nom pour le script! Le nom doit montrer clairement à quoi le script va te servir : MouvementJoueur, DetruireQuandCollision, CompteARebours, OrienterVersLaSouris etc…
Une fois que tu as validé, le script apparaît maintenant dans l’inspecteur en tant que composant de ton objet
il apparaît aussi dans le dossier racine de tes assets.
💡 Range tes affaires!
Ce que je recommande est de créer un dossier Scripts pour y ranger tous tes scripts! Le premier souci du développeur est d’avoir affaire à des assets mal rangés!
Pour créer un nouveau dossier, fais Clic droit > Create > Folder! Tu peux ensuite y glisser ton nouveau script!
Tu peux aussi créer directement ton script dans ton dossier Clic droit > Create > C# Script , tu n’auras plus à le ranger par la suite !
La structure du code en C#
Unity utilise un langage de programmation appelé C#. Tu peux ouvrir le contenu d’un script en double cliquant dessus. Cela ouvrira ton script dans ton éditeur de code par défaut (Visual Studio si tu l’as installé avec Unity).
Voici le template par défaut de tout nouveau script que tu crées sur Unity:
Les trois premières lignes servent juste à importer les fonctionnalités habituellement utilisées dans un script. Ce n’est pas la peine d’y toucher pour le moment!
Tout ton code sera contenu dans ce qu’on appelle une classe! Ici, la classe s’appelle « monScript » mais bien évidemment ce nom ne sera pas le même en fonction du script que tu écris! Ce qui est important c’est que ce nom soit bien identique avec le nom du fichier! Sinon tu risquerais de recevoir une erreur similaire à celle-ci quand tu essaies d’ajouter ton script à un objet:
C’est pourquoi on ne touche pas trop à la ligne « public class monScript : MonoBehaviour »
Ce qui nous intéresse vraiment est ce qui se passe entre les deux { } de la classe! Tu peux voir deux méthodes qui sont là par défaut:
- Start
- Update
Start
void Start() : Dès que le bouton Play est pressé, ce qui est dans la fonction Start(), se produit, une seule fois. C’est pourquoi c’est ici qu’on met tous les codes d’initialisation. (par exemple, dire que le joueur commence la partie avec 5 points de vie)
C’est un peu l’équivalent du Bloc “Quand le drapeau vert est cliqué” de Scratch pour ceux qui connaissent.
Update
void Update() : qui s’effectue à chaque seconde, la fonction Update (Actualisation en français), exécute le code contenu dans sa fonction. C’est généralement dans le update que se situe le cœur du jeu. Le update représente ce qui se passe pendant que le jeu est toujours en train d’être joué. C’est donc là qu’on va généralement coder les actions du joueur, le comportement des ennemis, la mise à jour du score…etc.
C’est un peu l’équivalent du Bloc “Répéter indéfiniment” de Scratch pour ceux qui connaissent.
Astuce : Le mot void signifie que tu crée une fonction penses à le laisser devant ta fonction.
Les règles de l’écriture en C# :
Unity interprète toujours le code en C# du haut vers le bas. Il convient donc de bien séparer les blocs de code, ainsi que les lignes entre elles.
En fonction de l’élément et de sa place, les séparateurs seront différents. Les couleurs permettent de différencier la nature des différents éléments.
3 éléments de “grammaire” importants :
- { } : Brackets (Accolades). Elles encadrent tout le code et séparent une fonction d’une autre ou une condition d’une autre.
- ; : Point-Virgule. Il permet de clore la déclaration d’une variable ou l’appel d’une fonction.
( ) : Parenthèses. Elles permettent de désigner l’objet ou la variable concernée par la fonction.
Les conditions :
(If en anglais, si en français) Elles permettent d’interroger le code.
- On utilise le mot clé ‘if’ ( = si)
- On note entre parenthèse la condition
- On ouvre (et ferme) des accolades et on note entre les accolades le code à faire si la condition est vraie
N’oublie pas de mettre des point-virgules à la fin de chaque ligne et fermer tes accolades !
Par exemple, je peux créer une variable de vie pour un GameObject et si ma variable de vie est égale à 0, je détruis mon GameObject :
Debug.Log
Debug.Log(“…”) : Le Debug.Log nous permet de vérifier les bugs.
Dans mon exemple une musique est supposé se jouer. Mais aucune musique ne se lance. Ainsi en mettant un message à cet endroit là, il y a deux constat à faire :
- Soit le message s’affiche, et ça veut dire que la collision avec l’ennemi s’effectue bien et qu’il y a un problème après le Debug.log !
- Soit le message ne s’affiche pas et le problème est avant le Debug.log sans doute au niveau de la collision qui ne s’effectue pas correctement !
Ou s’affiche ce message ?
Dans la console ! La console est situé par défaut à côté du dossier Projet.
Astuce :
Tu peux cliquer sur le bouton Collapse pour eviter que les message récurrent n’apparaissent trop de fois.