Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Création d'instances

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.

You can create as many scenes as you'd like and save them as files with the .tscn extension, which stands for "text scene". The label.tscn file from the previous lesson was an example. We call those files "Packed Scenes" as they pack information about your scene's content.

Here's an example of a ball. It's composed of a RigidBody2D node as its root named Ball, which allows the ball to fall and bounce on walls, a Sprite2D node, and a CollisionShape2D.

../../_images/instancing_ball_scene.png

Une fois que vous avez enregistré une scène, celle-ci fonctionne comme un modèle : Vous pouvez la copier dans d’autres scènes autant de fois que vous le souhaitez. Dupliquer ainsi un objet à partir d'un modèle s'appelle instancier.

../../_images/instancing_ball_instances_example.png

Comme nous l'avons mentionné dans la partie précédente, les scènes instanciées se comportent comme un nœud : l'éditeur cache leur contenu par défaut. Lorsque vous instanciez la balle, vous ne voyez que le nœud Ball. Remarquez également que chaque duplicata a un nom unique.

Every instance of the Ball scene starts with the same structure and properties as ball.tscn. However, you can modify each independently, such as changing how they bounce, how heavy they are, or any property exposed by the source scene.

En pratique

Let's use instancing 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.

Extract the archive on your computer. To import it, you need the Project Manager. The Project Manager is accessed by opening Godot, or if you already have Godot opened, click on Project -> Quit to Project List (Ctrl + Shift + Q, Ctrl + Option + Cmd + Q on macOS)

In the Project Manager, click the Import button to import the project.

../../_images/instancing_import_button.png

Dans la fenêtre qui s'affiche, cliquez sur le bouton Parcourir et naviguez jusqu'au dossier que vous avez extrait.

../../_images/instancing_import_browse.png

Double-cliquez sur le fichier project.godot pour l'ouvrir.

../../_images/instancing_import_project_file.png

Enfin, cliquez sur le bouton Importer et Modifier.

../../_images/instancing_import_and_edit_button.png

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.png

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.png

Double-cliquez sur la scène de la balle pour l'instancier.

../../_images/instancing_instance_child_window.png

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

../../_images/instancing_ball_instanced.png

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

../../_images/instancing_ball_moved.png

Play the game by pressing F5 (Cmd + B on macOS). You should see it fall.

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

../../_images/instancing_ball_duplicated.png

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

../../_images/instancing_main_scene_with_balls.png

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. Change the default properties of every Ball by opening the ball.tscn scene and making a change to the Ball node there. Upon saving, all instances of the Ball in the project will see their values update.

Note

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

Let's try this. Open ball.tscn and select the Ball node. In the Inspector on the right, click on the PhysicsMaterial property to expand it.

../../_images/instancing_physics_material_expand.webp

Set its Bounce property to 0.5 by clicking on the number field, typing 0.5, and pressing Enter.

../../_images/instancing_property_bounce_updated.webp

Jouez le jeu en appuyant sur F5 et remarquez que toutes les balles rebondissent maintenant beaucoup plus. Comme la scène Ball est un modèle pour toutes les instances, la modifier et la sauvegarder entraîne la mise à jour de toutes les instances en conséquence.

Ajustons maintenant une instance individuelle. Revenez à la scène Main en cliquant sur l'onglet correspondant au-dessus de la fenêtre d'affichage.

../../_images/instancing_scene_tabs.png

Sélectionnez l'un des nœuds Ball instanciés et, dans l'inspecteur, définissez sa valeur Gravity Scale sur 10.

../../_images/instancing_property_gravity_scale.png

Un bouton gris "rétablir" apparaît à côté de la propriété ajustée.

../../_images/instancing_property_revert_icon.png

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

Si vous modifiez une valeur sur le PhysicsMaterial d'une instance, cela affectera toutes les autres. Ceci est dû au fait que PhysicsMaterial est une ressource, et que les ressources sont partagées entre les instances. Pour rendre une ressource unique pour une instance, faites un clic droit dessus dans l'inspecteur et cliquez sur 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 quelle scène possède quelle entité.

Once you have a diagram, we recommend creating a scene for each element listed in it to develop your game. You'll use instancing, 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

Imaginons que nous commencions par créer la pièce. Nous pourrions créer plusieurs scènes de pièces différentes, avec des arrangements uniques de meubles. Plus tard, nous pourrions créer une scène de maison qui utilise plusieurs instances de pièces pour l'intérieur. Nous pourrions créer une citadelle à partir de plusieurs maisons instanciées et d'un grand terrain sur lequel nous placerions la citadelle. Chacune d'entre elles serait une scène qui instaure une ou plusieurs sous-scènes.

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é

Instancing, 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.