Instancier

Introduction

La création d’une scène unique et l’ajout de nœuds peuvent fonctionner pour de petits projets, mais à mesure que la taille et la complexité d’un projet augmentent, le nombre de nœuds peut rapidement devenir ingérable. Pour y remédier, Godot permet de séparer un projet en un nombre quelconque de scènes. Cela vous fournit un outil puissant qui vous aide à organiser les différentes composantes de votre jeu.

Dans Des scènes et des nœuds vous avez appris qu’une scène est une collection de nœuds organisés dans une structure arborescente, avec un seul nœud comme racine de l’arbre.

../../_images/tree.png

Vous pouvez créer autant de scènes que vous le souhaitez et les sauvegarder sur disque. Les scènes sauvegardées de cette manière sont appelées « Scènes empaquetés » (Packed Scenes) et ont une extension de nom de fichier .tscn.

../../_images/instancingpre.png

Une fois qu’une scène a été sauvegardée, elle peut être instanciée dans une autre scène comme s’il s’agissait d’un autre nœud.

../../_images/instancing.png

Dans l’image ci-dessus, la scène B a été ajoutée à la scène A en tant qu’instance.

L’instanciation par l’exemple

Pour apprendre comment fonctionne l’instanciation, commençons par télécharger un exemple de projet : instancing.zip.

Décompressez ce projet où vous le souhaitez. Ensuite, ouvrez Godot et ajoutez ce projet au gestionnaire de projet en utilisant le bouton “Importer” :

../../_images/instancing_import.png

Naviguez jusqu’au dossier que vous avez extrait et ouvrez le fichier « project.godot » que vous pouvez trouver à l’intérieur. Après cela, le nouveau projet apparaîtra dans la liste des projets. Modifiez le projet en appuyant sur le bouton “Modifier”.

Ce projet contient deux scènes : « Ball.tscn » et « Main.tscn ». La scène de la balle utilise un RigidBody2D pour fournir un comportement physique pendant que la scène principale dispose d’un ensemble d’obstacles (utilisant des StaticBody2D) pour que le balle entre en collision avec.

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

Ouvrez la scène Main, puis sélectionnez le nœud racine :

../../_images/instancing_mainroot.png

Nous voulons ajouter une instance de la scène Ball en tant qu’enfant de « Main ». Cliquez sur le bouton en forme de « lien » (son texte en survol indique « Instancier un fichier de scène en tant que nœud. ») et sélectionnez le fichier Ball.tscn.

../../_images/instancing_linkbutton.png

La balle sera placée dans le coin supérieur gauche de la zone de l’écran (correspondant à (0, 0) en coordonnées de l’écran). Cliquez et faites glisser la balle quelque part près du centre supérieur de la scène :

../../_images/instancing_placeball.png

Appuyez sur « Jouer » et regardez la balle tomber en bas de l’écran :

../../_images/instancing_playbutton.png

Instances multiples

Vous pouvez ajouter autant d’instances que vous le souhaitez à une scène, soit en utilisant à nouveau le bouton « Instancier », soit en cliquant sur l’instance de la balle et en appuyant sur « Dupliquer » (Ctrl-D) :

../../_images/instancing_multiball.png

Exécutez à nouveau la scène et toutes les balles tomberont.

../../_images/instancing_multiball.gif

Éditer des instances

Ouvrez la scène Ball et ajoutez un PhysicsMaterial en cliquant sur la flèche vers le bas et en sélectionnant « New PhysicsMaterial ».

../../_images/instancing_physicsmat1.png

Ensuite, développez le contenu en cliquant dessus et définissez la propriété Bounce sur 1.

../../_images/instancing_physicsmat2.png

Appuyez sur « Play » et remarquez que toutes les balles instanciées sont maintenant beaucoup plus rebondissantes. Comme les balles instanciées sont basées sur la scène sauvegardée, les modifications apportées à cette scène affecteront toutes les instances.

You can also adjust individual instances. Set the bounce value back to 0 and then in the Main scene, select one of the instanced balls. Resources like PhysicsMaterial are shared between instances by default, so we need to make it unique. Click on the down arrow and select « Make Unique ». Set its Bounce to 1 and press « Play ».

../../_images/instancing_property.png

Remarquez qu’un bouton gris « retour en arrière » apparaît à côté de la propriété ajustée. Lorsque ce bouton est présent, cela signifie que vous avez modifié une propriété dans la scène instanciée pour remplacer sa valeur dans la scène sauvegardée. Même si cette propriété est modifiée dans la scène originale, la valeur personnalisée restera. Appuyez sur le bouton de retour en arrière pour rétablir la propriété à la valeur de la scène sauvegardée.

Conclusion

L’instanciation peut être utile lorsque vous voulez créer plusieurs copies d’un même objet. Il est également possible de créer des instances dans le code en utilisant GDScript, voir le chapitre Scripting (suite).