Pour ouvrir un script et pouvoir le modifier, il te suffit de double-cliquer dessus. L'interface Monodevelop va s'ouvrir et tu vas pouvoir écrire/modifier ton script en C# !
Pour créer un nouveau script :
Tous les scripts porte un nom qui donne le nom à la class du script. Ce sera toujours LE MÊME nom pour les deux (comme sur l'image ci-dessous).
Lorsque l'on crée un nouveau script, on obtient le début de code suivant ->
On va pouvoir agir sur plusieurs partie du code :
En C#, lorsque l'on déclare une variable, on va aussi déclarer son type.
On a les mêmes variables classiques que tu as vues en Python :
On donne le type, puis le nom de notre variable au début de notre code.
À la fin de chaque ligne, on écrit un ';' (point virgule) pour terminer la ligne !
Pour rappel, un int est un nombre entier, un float est un nombre à virgule, un bool est soit vrai soit faux et une string est une chaîne de caractères.
Attention, les float s'écrivent avec un f à la fin en C# ! Par exemple : monfloat = 12.5f
Les variables 'public' seront visibles depuis l'Inspector à la différence des variables 'private'.
Les variables 'public' sont aussi accessibles depuis un autre script !
Dans le code :
Dans l'Inspector :
En C#, tu peux augmenter ou réduire une variable simplement :
Mais Unity a aussi ses propres variables ! En voici quelques unes :
Après avoir déclaré nos variables, on va les initialiser (leur donner une valeur de départ). Par exemple :
Un script est attaché à un objet, c'est-à-dire qu'on le place sur un GameObject et qu'il aura des actions sur cet objet. Par exemple, quand on parle de collisions, on parle de collision entre l'objet sur lequel est le script et les autres objets. Mais ça ne nous empêche pas d'avoir des interactions avec d'autres GameObject !
Tu peux aussi créer des listes pour sélectionner plusieurs GameObject dans l'Inspector :
Dans l'Inspector on obtient :
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 :
Pour déclencher un événement en fonction d'un clic de souris ou d'une touche appuyée, on va aussi utiliser les conditions :
Pour les touches du clavier :
Pour la souris :
En C#, les opérateurs OU et ET s'écrivent de la manière suivante :
Je déclare mon bool et je lui donne une valeur de départ.
Un booléen est une variable qui prend comme valeur 'vrai' (true) ou 'faux' (false).
Pour vérifier si mon bool est vrai ou faux, on va simplement noter :
Si le bool est vrai
Si le bool est faux
Si tu as besoin de vérifier la valeur d'une variable d'un autre script, tu peux le faire comme suit :
-> Si le booléen 'attaque' du script 'PlayerAnimation' sur le GameObject 'Player' est vrai alors..
Comme dit plus haut, on va avoir deux manières de gérer les collisions suivant le type de collider de l'objet avec lequel on veut rentrer en collision :
On va écrire ces void en dehors des void Start et Update :
Void indique une fonction qui ne 'renvoie rien'. Une fonction, comme tu as pu le voir en Python est un bout de code qui va faire quelque chose et dans la majorité du temps retourner un résultat. On peut par exemple créer une fonction qui fait des multiplications et qui nous retourne le résultat. Un Void ne va pas retourner de résultat mais va faire des actions quand il s'active. Par exemple, avec le void pour la collision, on peut supprimer un objet s'il rentre en collision avec un autre objet !
Quand on rentre en collision, la première chose que l'on va faire, c'est regarder l'objet avec lequel on rentre en collision. On ne va pas faire la même chose si on touche un ennemi ou un objet à récupérer. On va donc utiliser les conditions pour regarder qui on touche et c'est à ça que sert le 'Collision' (ou 'Collider' pour Trigger) entre parenthèses !
Pour regarder l'objet avec lequel on rentre en collision, on regarde son tag !
Par exemple, si l'objet avec lequel on rentre en collision porte le tag 'ennemi', on va détruire l'objet sur lequel est le script !
Si je place mon script sur le FPSController et que je rentre en collision avec un objet (ici ma sphère) qui porte le tag 'ennemi' et dont le collider est en mode 'Trigger', mon FPSController disparaît de la scène comme voulu !
Attention : Le FPS Controller ne détecte pas toujours les collisions avec le Void OnCollisionEnter(). Tu peux faire plusieurs choses pour y remédier :
Pour customiser tes scripts, tu vas avoir besoin de quelques fonctions très utiles :
Détruire un objet :
Faire apparaître un objet :
Charger une scène :
Trouver tous les GameObjects avec un tag particulier :
Pour, par exemple, vérifier qu'il n'y a plus d'ennemis sur la scène ! On récupère tous les GameObjects avec le tag 'enemy'. Il nous suffit ensuite de vérifier si la variable est vide (nulle) ou pas !
Modifier la position d'un GameObject :
Ici on amène le GameObject sur lequel est le script à la position (0,0,0) !
Faire un mouvement continu :
Pour des téléportations par exemple :
Si on rentre en collision avec un objet qui fait partie de la liste 'qui_peut_declencher', l'objet 'qui_sera_telep' va à la position du vecteur 'ou' !
Créer une chronomètre :
On commence par créer une variable de type float et avec Time.deltaTime, on diminue la variable. On n'a plus qu'à préciser ce qu'il se passe quand elle est inférieure ou égale à 0 !
Afficher des variables sur le Canvas :
Pour afficher le chrono créé comme sur le GIF ci-dessus par exemple !
On commence par ajouter la librairie nécessaire pour le texte. On créé ensuite une variable de type Text. On la définie comme public pour la sélectionner dans l'Inspector. On transforme notre chronomètre en une variable lisible pour notre texte et on lui donne comme valeur !
On créé un texte sur notre scène et on le sélectionne dans l'Inspector :
Afficher une image sur le Canvas :
On va changer l'affichage d'une image lorsque le joueur touche un GameObject.
Dans cet exemple, mon GameObject est un bloc avec le tag 'ennemi'
On a d'abord créé une variable de type Image. Comme pour le texte, on va la créer dans la Scène et on la sélectionnera dans l'Inspector !
On va ensuite importer deux images et les passer en mode Sprite :
Pour finir, on place le script sur le joueur et on sélectionne nos éléments !
Si tu as un problème de collision avec ce code, regarde plus haut la partie sur les collisions !
Obtenir une valeur aléatoire :
Ici, on aura un nombre entier entre 1 et 4.
Attention : le max est exclusif pour les int et inclusif pour les float !
Tu peux utiliser avec, la fonction Switch. Switch nous permet de créer plusieurs conditions pour une variable.
Par exemple, si tu as une variable avec une valeur aléatoire, pour gérer tous les cas possibles simplement, on ne va pas écrire toutes les conditions possibles, on utilisera Switch à la place :
Afficher un message dans la console :
Très pratique pour débugger !
Pour voir ce que tu peux modifier dans les scripts existants ou comment créer certains mécanismes, tu peux regarder la page suivante !