Cherchez Unity

Programmer en C# dans Unity pour les débutants

Vous voulez apprendre à programmer dans Unity pour créer votre premier jeu, mais vous ne savez pas par où commencer. Nous sommes là. Voici une synthèse des éléments de programmation dans Unity et quelques supports d'apprentissage qui vous seront utiles pour des projets plus avancés comme "Space Shooter". Vous apprendrez les bases de la programmation comme les variables, les fonctions et les classes, et comment les utiliser.

Allez ici si vous êtes un programmeur expérimenté mais que vous découvrez Unity.

Qu'est-ce que la programmation dans Unity ?

Les scripts régissent le comportement de vos GameObjects. Ce sont les scripts et les composants attachés aux GameObjects, aisni que la façon dont ils interagissent, qui créent votre gameplay. Les scripts sont désormais différents de la programmation dans Unity. Si vous avez déjà fait de la programmation pure, si vous avez créé une application par exemple, vous savez que, dans Unity, vous n'avez pas besoin de créer le code qui exécute l'application, car Unity le fait pour vous. Vous pouvez ainsi vous concentrer sur le gameplay dans vos scripts.

Unity exécute une grande boucle et lit toutes les données d'une scène d'un jeu. Par exemple, il lit à travers les éclairages, les mesh et les comportements et traite les informations pour vous.

Prenons l'exemple de la télévision. En Amérique du Nord, par exemple, vous avez 29,5 frame/sec. Unity doit offrir les mêmes performances. Il s'agit d'exécuter des frames discrets et uniques les uns après les autres. Dirigez Unity avec les instructions que vous rédigez dans vos scripts pour que le moteur exécute les frames les uns après les autres le plus rapidement possible.

Un framerate élevé signifie que votre jeu est plus fluide et que vos scripts s'exécutent plus souvent, rendant ainsi les commandes plus réactives.

Quelles langues pouvez-vous utiliser dans Unity ?

Un script doit être attaché à un élément GameObject de la scène afin d'être appelé par Unity. Les scripts sont écrits dans un langage spécial que seul Unity comprend. C'est via ce langage que nous pouvons parler au moteur et lui donner nos instructions.

Le langage utilisé dans Unity est le C# (prononcé C dièse). Tous les langages qu'utilise Unity sont des langages de programmation orientés objets. Comme tout langage, les langages des scripts ont une syntaxe et des éléments primaires appelés variables, fonctions et classes.

Si vous utilisez une version de Unity antérieure à la version 2017.3, vous remarquerez un éditeur de texte appelé MonoDevelop : il nous aide à compléter notre code, à savoir si notre code est correct et à prendre des raccourcis. À partir de la version 2018.1, vous pouvez également utiliser Visual Studio pour la communauté Unity, ou d'autres éditeurs de texte comme Visual Studio, Notepad, ou Sublime text.

Voici un script comprenant un exemple de code (basé sur le tutoriel Coder dans Unity pour les novices):

sample code unity

Comme vous le voyez, il existe des variables, des fonctions et des classes.

À quoi servent ces éléments ?

Les variables représentent des valeurs et des références aux objets (vous pouvez considérer les objets comme des variables plus « lourdes »). Elles sont comme une boite qui renferme des outils à notre disposition. Les variables commencent par une lettre minuscule.

Les fonctions sont des collections de code qui comparent et manipulent ces variables. Les fonctions commencent par une lettre majuscule. Nous organisons le code par fonctions, afin de pouvoir les réutiliser facilement à plusieurs reprises dans différentes parties du programme.

Les Classes sont un moyen de structurer le code pour regrouper des collections de variables et de fonctions afin de créer un modèle qui définit les propriétés d'un objet.

Le script compare ces objets et leurs statuts et valeurs actuels. Il est basé sur la détermination logique d'un résultat ou d'une résolution.

Variables

Dans Unity, les scripts commencent en empilant les outils dont vous avez besoin sur le dessus, généralement en déclarant des variables. Vous pouvez voir les variables déclarées ici avec le mot clé de visibilité « public » ou « privé » en premier, suivi d'un type et d'un nom.

variables in unity

Il existe différents modes de visibilité, mais public et privé sont les principaux.

SI vous créez un script avec le texte ci-dessus dans votre éditeur de code puis que vous revenez dans Unity et assignez ce script à un GameObject, vous verrez que vous pouvez accéder à la variable déclarée publique dans l'inspecteur, mais vous ne verrez pas les éléments privés, car les éléments définis comme privés sont uniquement accessibles via ce script particulier, dans cette classe spécifique.

Si vous rendez cet élément public, il sera accessible aux autres scripts et aux autres classes et pourra être modifié dans l'inspecteur à partir de l'éditeur Unity.Cela signifie que d'autres personnes pourront y accéder et modifier sa valeur.

Il existe de nombreuses raisons de choisir entre privé et public. Les variables privées permettent un code plus propre, puisque vous savez que la valeur de ces variables peut être modifiée uniquement dans cette classe. La correction d'erreur et l'entretien du code sont donc plus faciles.

Si vous sélectionnez le mode public et que vous rencontrez un problème, vous devez examiner toute votre base de code pour identifier la source, car tous les autres objets ont accès à cette variable.Mais si vous souhaitez que les objets communiquent entre eux, vous avez besoin de variables (ou de fonctions) publiques.

Un autre aspect important des variables est le type. Un type définit le type de valeur qu'une variable a en mémoire. Cela peut être un chiffre, un texte ou des types plus complexes, comme ceux des images ci-dessous : Transform, Light et Demo Script dans l'image ci-dessous sont des références aux composants. Unity doit savoir de quel type d'objet il s'agit pour savoir comment le gérer.

variables in unity inspector

Le nom des variables est également important. Leur nom ne peut pas commencer par un chiffre et ne peut pas contenir d'espaces. En C#, la convention pour les noms de variables est camelCase : vous commencez par une lettre minuscule et vous ajoutez des mots sans espaces qui commencent par une lettre majuscule. Ex : myLight.

Lorsque Unity compile le script, il rend les variables publiques visibles dans l'éditeur. Regardez l'image ci-dessous, tirée de l'inspecteur.

demo script unity inspector

Fonctions

Les scripts manipulent les variables à laide de fonctions. Il existe différentes fonctions qui s'exécutent automatiquement dans Unity. Voir ci-dessous :

functions in unity

Awake est appelée uniquement lorsque l'élément GameObject avec ce composant est initialisé. Si un GameObject est inactif, il ne sera pas appelé avant de devenir actif. Cependant, Awake est appelé même si le GameObject est actif mais que le composant n'est pas activé (via la case à cocher à côté de son nom). Vous pouvez utiliser Awake pour initialiser toutes les variables auxquelles vous devez assigner une valeur.

Start - comme Awake, Start sera appelée si un GameObject est actif, mais seulement si le composant est activé. Pour plus d'informations sur les différences avec Awake, regardez cette vidéo.

Update est appelée une fois par frame.C'est ici que vous placez le code qui définit la logique qui s'exécute en continu, comme les animations, l'IA, et d'autres parties du jeu qui doivent être actualisées en permanence.

FixedUpdate est à utiliser pour les physiques.

Comme vous le voyez, il existe Fixed Update et Update et dans notre section des tutoriels de script, vous pouvez apprendre à appliquer des effets à chaque frame avec ces fonctions, ainsi que leurs différences..

LateUpdate est une fonction similaire à Update, mais qui est appelée à la fin du frame. Unity examinera tous les objets du jeu, identifiera les Updates et appellera LateUpdates. Cela est notamment utile pour la caméra. Imaginons que vous souhaitiez déplacer un personnage dans votre jeu. Puis qu'un autre personnage lui rentre dedans pour finir dans une position différente. Si nous déplaçons la caméra en même temps que le personnage, il y a une secousse et la caméra ne se retrouve pas au bon endroit. Alors de façon basique, c'est une deuxième boucle qui s'avère très pratique.

Fonctions de programmation

Lorsque vous écrivez une fonction, n'oubliez pas qu'elle doit commencer par le type de fonction retournée au début, suivi du nom de la fonction puis des paramètres entre parenthèses (si applicable). Les noms des fonctions commencent par une lettre majuscule et le corps de la fonction est placé entre des parenthèses bouclées. Voici un exemple d'écriture de fonction :

writing functions unity

Comment appelle-t-on cette fonction ?

function-in-unity

Les fonctions peuvent effectuer des calculs et communiquer une valeur. Vous pouvez demander à une fonction d'exécuter une tâche, de traiter une information, puis de renvoyer une réponse.Si vous utilisez le type « void », elle ne renverra aucune donnée.

Classes

Les classes sont des collections de ces variables et fonctions. Par exemple, ce script est une classe :

class example in Unity

N'oubliez pas que le nom de classe doit correspondre au nom de fichier du script C# pour fonctionner. Pour être attachée à un élément GameObject, elle doit dériver d'une autre classe appelée MonoBehaviour, qui est automatiquement placée à votre disposition lorsque vous créez un script pour la première fois. Les classes peuvent être publiques ou privées.

Dans Unity, si vous créez une classe personnalisée comme dans l'exemple ci-dessous, vous devez lui demander de la sérialiser. Cela signifie qu'elle sera convertie en simples données que Unity pourra examiner dans l'inspecteur. Lorsque vous procédez ainsi, la classe apparaît dans l'inspecteur.

classes in unity example

Les variables, les fonctions et les classes sont les bases pour appréhender le code dans Unity. Consultez la section Apprentissage, vous y trouverez plusieurs tutoriels de scripts utiles qui vous aideront à vous familiariser avec la programmation, puis à progresser pour créer des codes détaillés pour vos projets.