Le GameObject et ses composants
La programmation par composition
1. Présentation
Un concept fondamental à comprendre lorsque l’on veut se lancer dans la création de script personnalisé ou plus simplement dans la manipulation d’un objet, comme l’ajout d’une texture particulière, est le principe de programmation par composition.
L’idée étant de partir d’une boîte vide qui sera la pièce principale utilisée par l’ensemble des entités pour ensuite lui ajouter des composants. Cette entité en est réduite à être un simple conteneur de composant. La combinaison des composants crée ainsi une entité spécifique simple ou complexe.
Un composant peut ainsi se traduire comme un comportement qui est ajouté à une entité "conteneur". Cette même entité est alors définie par les différents composants qui la composent. Les composants sont par contre liés à un seul objet "conteneur" parent et leur durée de vie est intimement liée à celui-ci.
On peut ainsi considérer cet exemple du monde réel : l’entité "Vélo" est composée de deux composants "roues", d’un composant "guidon" et d’un composant "selle".
Attention, vous pouvez aussi entendre parler de programmation par agrégation, qui est un concept très proche de la programmation par composition.
2. Le GameObject : le conteneur de composants
Unity s’appuie entièrement sur ce design pattern (patron de conception) afin de créer tout type d’objets : personnage animé, carte de monde, caméra, etc.
L’objet de base servant de conteneur est la classe GameObject. Comme vu dans le chapitre précédent, une scène consiste notamment en une hiérarchie de GameObjects ayant un ou plusieurs composants rattachés.
Chacun de ces composants peut ainsi être ajouté une ou plusieurs fois au même GameObject.
3. Les différentes familles de composants
Il existe une multitude de types de composants faisant directement partie d’Unity. Pour tous les autres cas, il est possible de créer des scripts personnalisés pour répondre à des besoins spécifiques.
Les composants...
La classe GameObject
1. Présentation
La classe GameObject est, comme nous venons de le voir, la classe de base, fondamentale, pour l’ensemble des objets disposés dans une scène. Un GameObject seul est très peu utile car ses fonctions sont très basiques : affectation d’un nom, d’un tag ou d’un layer spécifique.
Si cet objet semble à première vue complètement inutile, sa grande force est de pouvoir se rendre modulaire très facilement grâce à l’ajout de composant.
2. Manipuler un GameObject
a. Ajouter un GameObject
Une des manipulations que vous ferez certainement le plus souvent sera d’ajouter un nouveau GameObject dans une scène. Cela peut se faire très simplement.
Création d’un GameObject vide
Dans la fenêtre Hierarchy, sélectionnez Create - Create Empty.
Le nom de l’objet est utilisé afin de pouvoir récupérer l’élément via un script et pour l’identifier dans la hiérarchie.
À ce titre, il est intéressant de normaliser le nom de vos objets dans la hiérarchie afin de vous simplifier la vie. Une scène peut facilement passer les centaines d’objets et cela peut vite devenir une horreur pour trouver un élément précis.
b. Supprimer un GameObject
S’il est possible d’ajouter un nombre...
Manipuler les composants dans l’éditeur
Une fois un GameObject ajouté à la scène, il est possible de lui ajouter des composants.
Nous verrons aussi dans le chapitre suivant qu’il est possible de manipuler les composants via un script.
1. Ajouter un composant
Il est très simple de manipuler un objet d’une scène pour lui ajouter, supprimer ou modifier un composant. La fenêtre Inspector permet d’afficher la liste des composants ainsi que l’accès aux propriétés de ceux-ci.
Création d’une sphère
Dans la fenêtre Hierarchy, sélectionnez Create - Create Empty.
Dans la fenêtre Inspector, cliquez sur Add Component - Mesh - Mesh Filter.
Un nouveau composant Mesh apparaît dans l’Inspector.
Dans la fenêtre Inspector - Mesh Filter, cliquez sur l’outil de sélection à droite du champ de saisie Mesh.
Dans la liste, double cliquez sur Sphere.
Dans la fenêtre Inspector, cliquez sur Add Component - Mesh - Mesh Renderer.
Dans la fenêtre Inspector - Mesh Renderer - Materials, cliquez sur l’outil de sélection à droite du champ de saisie Element 0 puis double cliquez sur Default-Material.
Celui-ci apparaît dans l’Inspector :
Dans la fenêtre Inspector, cliquez sur Add Component - Physics - Sphere Collider.
L’éditeur propose...
Réutiliser ses objets grâce aux préfabriqués
1. Présentation
Lors de la création d’une scène dans l’éditeur, de multiples GameObjects sont créés avec leurs composants propres et leurs valeurs bien définies. Très souvent, un objet peut être dupliqué un grand nombre de fois, lors de la création d’un décor par exemple, et cela peut être fastidieux de modifier chaque GameObject, un par un, afin de modifier une valeur.
C’est à ce moment que les objets préfabriqués, appelés prefabs, viennent à notre secours. Ils permettent d’enregistrer des objets avec l’ensemble de leurs composants ainsi que leurs valeurs pour être réutilisés. En utilisant un prefab dans une scène, vous vous assurez que l’ensemble de ses instances seront identiques en tout point à la création. Il est aussi tout à fait possible de modifier unitairement chaque instance du prefab lorsqu’il est dans la scène.
2. Création d’un prefab
La création d’un prefab dans l’éditeur se fait à partir d’une simple opération de glisser/déposer.
Créez une nouvelle scène et ajoutez-lui deux sphères grâce au menu Create - 3D Object - Sphere de la fenêtre...