Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Création d'instances

Note

This tutorial refers to instantiating scenes in the editor. To learn how to instantiate scenes from code, see Nœuds et instances de scène.

Godot's approach to instantiation described below should not be confused with hardware instancing that can be used to render large amounts of similar objects quickly. See Optimisation à l’aide de MultiMeshes instead.

Dans la partie précédente, nous avons vu qu'une scène est une collection de nœuds organisés en une structure arborescente, avec un seul nœud comme racine. Vous pouvez diviser votre projet en un nombre quelconque de scènes. Cette fonctionnalité vous aide à décomposer et à organiser les différents composants de votre jeu.

Vous pouvez créer autant de scènes que vous le souhaitez et les enregistrer sur le disque avec l'extension .tscn, qui signifie "text scene". Le fichier Label.tscn de la leçon précédente en était un exemple. Nous appelons ces fichiers "Packed Scenes", car ils contiennent des informations sur le contenu de votre scène.

Voici un exemple de balle. Il est composé d'un nœud RigidBody2D à la racine appelé Ball, permettant à la balle de tomber et de rebondir sur les murs, d'un nœud Sprite2D, et d'un nœud CollisionShape2D.

../../_images/instancing_ball_scene.webp

Once you have saved a scene, it works as a blueprint: you can reproduce it in other scenes as many times as you'd like. Replicating an object from a template like this is called instantiation.

../../_images/instancing_ball_instances_example.webp

As we mentioned in the previous part, instantiated scenes behave like a node: the editor hides their content by default. When you instantiate the Ball, you only see the Ball node. Notice also how each duplicate has a unique name.

Chaque instance de la scène Ball commence avec la même structure et les mêmes propriétés que ball.tscn. Cependant, vous pouvez modifier chacune d'elles indépendamment, par exemple en changeant la façon dont elles rebondissent, leur poids ou toute propriété exposée par la scène source.

En pratique

Let's use instantiation in practice to see how it works in Godot. We invite you to download the ball's sample project we prepared for you: instancing_starter.zip.

Extrayez l'archive sur votre ordinateur. Pour l'importer, vous avez besoin du gestionnaire de projets. Le gestionnaire de projets est accessible en ouvrant Godot, ou si vous avez déjà Godot ouvert, cliquez sur Projet > Quitter vers la liste des projets (Ctrl + Shift + Q, Ctrl + Option + Cmd + Q sur macOS)

In the Project Manager, click the Import button.

../../_images/instancing_import_button.webp

In the file dialog that appears, navigate to the folder you extracted. Double-click the project.godot file to select it.

../../_images/instancing_import_project_file.webp

Finally, click the Import button to import the project.

../../_images/instancing_import_and_edit_button.webp

Une fenêtre vous informant que le projet a été ouvert pour la dernière fois dans une ancienne version Godot peut apparaître. Ce n'est pas un problème. Cliquez sur OK pour ouvrir le projet.

The project contains two packed scenes: main.tscn, containing walls against which the ball collides, and ball.tscn. The main scene should open automatically. If you're seeing an empty 3D scene instead of the main scene, click the 2D button at the top of the screen.

../../_images/instancing_2d_scene_select.webp ../../_images/instancing_main_scene.webp

Ajoutons une balle comme enfant du nœud Main. Dans le dock de la scène, sélectionnez le nœud Main. Puis, cliquez sur l'icône lien en haut du dock scène. Ce bouton vous permet d'ajouter une instance d'une scène en tant qu'enfant du nœud actuellement sélectionné.

../../_images/instancing_scene_link_button.webp

Double-click the ball scene to instantiate it.

../../_images/instancing_instance_child_window.webp

La balle apparaît dans le coin supérieur gauche du viewport.

../../_images/instancing_ball_instanced.webp

Cliquez dessus et faites-le glisser vers le centre de la vue.

../../_images/instancing_ball_moved.webp

Jouez au jeu en appuyant sur F5 (Cmd + B sur macOS). Vous devriez le voir tomber.

Now, we want to create more instances of the Ball node. With the ball still selected, press Ctrl + D (Cmd + D on macOS) to duplicate it. Click and drag the new ball to a different location.

../../_images/instancing_ball_duplicated.webp

Vous pouvez répéter ce processus jusqu'à ce que vous en ayez plusieurs dans la scène.

../../_images/instancing_main_scene_with_balls.webp

Rejouez le jeu. Vous devriez maintenant voir toutes les balles tomber indépendamment les unes des autres. C'est ce que font les instances. Chacune est une reproduction indépendante d'une scène modèle.

Modification de scènes et d’instances

Les instances ne s'arrêtent pas là. Avec cette fonctionnalité, vous pouvez :

  1. Modifiez les propriétés d'une balle sans affecter les autres en utilisant l'Inspecteur.

  2. Modifiez les propriétés par défaut de toutes les balles en ouvrant la scène ball.tscn et en apportant une modification au nœud Ball. Après avoir enregistré les changements, toutes les instances de Ball dans le projet se verront mises à jour.

Note

La modification d'une propriété sur une instance a toujours priorité sur les valeurs de la scène emballée correspondante.

Essayons ceci. Double-cliquez sur ball.tscn dans le Système de fichiers pour l'ouvrir.

../../_images/instancing_ball_scene_open.webp

Dans le dock Scène à gauche, sélectionnez le nœud Ball. Ensuite, dans l'Inspecteur à droite, cliquez sur la propriété PhysicsMaterial pour la développer.

../../_images/instancing_physics_material_expand.webp

Définissez sa propriété Bounce à 0.5 en cliquant sur le champ numérique, en tapant 0.5 et en appuyant sur Enter.

../../_images/instancing_property_bounce_updated.webp

Jouez au jeu en appuyant sur F5 (Cmd + B sur macOS) et remarquez comment toutes les balles rebondissent désormais beaucoup plus. Comme la scène Ball est un modèle pour toutes les instances, la modifier et l'enregistrer entraîne la mise à jour de toutes les instances en conséquence.

Let's now adjust an individual instance. Head back to the main scene by clicking on the corresponding tab above the viewport.

../../_images/instancing_scene_tabs.webp

Select one of the instantiated Ball nodes and, in the Inspector, set its Gravity Scale value to 10.

../../_images/instancing_property_gravity_scale.webp

A gray "revert" button appears next to the adjusted property.

../../_images/instancing_property_revert_icon.webp

Cette icône indique que vous remplacez une valeur de la scène source emballée(packed scene). Même si vous modifiez la propriété dans la scène originale, la valeur remplacée sera préservée dans l'instance. En cliquant sur l'icône de retour en arrière, vous restaurerez la valeur de la propriété dans la scène sauvegardée.

Relancez le jeu et remarquez que cette balle tombe maintenant beaucoup plus vite que les autres.

Note

Vous remarquerez peut-être que vous ne pouvez pas modifier les valeurs du PhysicsMaterial de la balle. En effet, PhysicsMaterial est une ressource et doit être rendue unique avant que vous puissiez la modifier dans une scène liée à sa scène d'origine. Pour rendre une ressource unique pour une instance, faites un clic droit sur la propriété Matériau physique dans l'Inspecteur et cliquez sur :button:`Rendre unique`dans le menu contextuel.

Les ressources sont un autre élément essentiel des jeux Godot que nous aborderons dans une prochaine leçon.

Les instances de scène en tant que langage de conception

Les instances et les scènes de Godot constituent un excellent langage de conception, qui distingue le moteur des autres. Nous avons conçu Godot autour de ce concept dès le départ.

Nous vous recommandons d'écarter les modèles de code architecturaux lorsque vous créez des jeux avec Godot, comme les diagrammes Modèle-Vue-Contrôleur (MVC) ou Entité-Relation. Au lieu de cela, vous pouvez commencer par imaginer les éléments que les joueurs verront dans votre jeu et structurer votre code autour d'eux.

Par exemple, vous pouvez décomposer un jeu de tir comme ceci :

../../_images/instancing_diagram_shooter.png

Vous pouvez créer un diagramme comme celui-ci pour presque tout type de jeu. Chaque rectangle représente une entité qui est visible dans le jeu du point de vue du joueur. Les flèches vous indiquent l'instanciateur de chaque scène.

Once you have a diagram, we recommend creating a scene for each element listed in it to develop your game. You'll use instantiation, either by code or directly in the editor, to build your tree of scenes.

Les programmeurs ont tendance à passer beaucoup de temps à concevoir des architectures abstraites et à essayer d'y intégrer des composants. La conception basée sur les scènes rend le développement plus rapide et plus simple, ce qui vous permet de vous concentrer sur la logique de jeu elle-même. La plupart des composants du jeu étant directement liés à une scène, l'utilisation d'une conception basée sur l'instanciation de scènes signifie que vous n'avez besoin que de peu de code architectural supplémentaire.

Voici l'exemple d'un diagramme de scène pour un jeu en monde ouvert avec des tonnes de assets et d'éléments imbriqués :

../../_images/instancing_diagram_open_world.png

Imagine we started by creating the room. We could make a couple of different room scenes, with unique arrangements of furniture in them. Later, we could make a house scene that uses multiple room instances for the interior. We would create a citadel out of many instantiated houses and a large terrain on which we would place the citadel. Each of these would be a scene instantiating one or more sub-scenes.

Plus tard, nous pourrions créer des scènes représentant des gardes et les ajouter à la citadelle. Ils seraient indirectement ajoutés à l'univers global du jeu.

Avec Godot, il est facile d’itérer sur votre jeu de cette façon, car tout ce que vous avez à faire est de créer et d’instaurer plus de scènes. Nous avons conçu l'éditeur pour qu'il soit accessible aux programmeurs, aux concepteurs et aux artistes. Un processus typique de développement en équipe peut impliquer des artistes 2D ou 3D, des concepteurs de niveaux, des concepteurs de jeux et des animateurs, qui travaillent tous avec l'éditeur Godot.

Résumé

Instantiation, the process of producing an object from a blueprint, has many handy uses. With scenes, it gives you:

  • La possibilité de diviser votre jeu en composants réutilisables.

  • Un outil pour structurer et encapsuler les systèmes complexes.

  • Un langage pour réfléchir à la structure de votre projet de jeu de manière naturelle.