Sites


Utiliser Godot Game Engine 3.0

Définir les scènes

Notre jeu sera basé sur des scènes. Nous avons déjà décrit les avantages des scènes dans le chapitre Structurer le jeu. Nous pouvons résumer le but du système de scène avec ces caractéristiques :

  • Encapsulation : une scène contiendra une fonctionnalité ou un composant du jeu. Tous les comportements spécifiques à cette fonctionnalité seront contenus dans cette scène.
  • Réutilisation : Les scènes sont instanciées dans d’autres scènes pour contribuer à une bonne optimisation et à de meilleurs délais de production.
  • Configurable : Les scènes peuvent avoir différents paramètres qui sont uniques pour chaque instance et qui affectes leur apparence et leur comportement.
  • Simplifie le travail d’équipe : Les scènes peuvent être modifiées par différents membres de l’équipe pour leur permettre d’y intégrer leur travail.

Sur ces bases, nous allons créer une scène pour chaque élément dont notre jeu aura besoin :

  • Une scène pour le background (arrière-plan),
  • Une scène pour le joueur,
  • Une scène pour chaque type obstacle,
  • Et une scène pour (les gouverner tous) pour les mélanger tous.

Créer une scène

Créons notre première scène.

  1. Cliquez sur Scène > Nouvelle scène dans le menu. L’éditeur n’affiche rien tant que la scène reste vide. En fait, si on essaye de sauvegarder maintenant, Godot nous informe qu’il est impossible de sauvegarder une scène sans arborescence racine dans l’éditeur de Node. Ajoutons-y donc des éléments.
  2. Dans l’éditeur de scène, cliquez sur Ajouter un nouveau Node (/enfant) ou utilisez le raccourcis clavier ctrl + A. Le menu créé un nouveau Node apparait.
  3. La liste des types de Nodes prédéfinis est plutôt longue, nous allons donc utiliser l’espace de recherche pour trouver celui qui nous intéresse. Ecrivons Node2D, c’est un type de Node basique pour les jeux en 2D.
  4. Parmi les résultats affichés, sélectionnez celui dont vous avez besoin et cliquez sur Créer.
  5. Vous pouvez maintenant sauvegarder la scène via le menu Scène > Sauvegarder la scène sous… Sauvegardons la dans le dossier Scene que nous venons de créer.
    Nommons la scene1.tscn ou Level.tscn.
    Enregistrer une scène dans Godot
  6. Testez éventuellement la scène en cliquant sur le bouton lancer la scène actuellement en cours d’édition en haut de l’éditeur  ou utilisez le raccourcis clavier F6.

Le Node2D est maintenant ajouté à la scène et apparait à la fois dans l’éditeur et dans l’éditeur de scène.

Node2D dans Godot

Les scènes peuvent être sauvegardées avec les extensions .tscn(lisible pour tout le monde via un éditeur de texte), .scn (Binaire) et .res. Gardez à l’esprit que les fichier .tscn sont plus légers et rapide, ils donnent la possibilité d’être lu par un humain et offre un meilleur contrôle des versions. Lors de l’importation, les fichier .tscn son compilés en binaires .scn stockés dans le dossier .import.

Définir la scène principale

Comme nous l’avons dit, le jeu sera composé de nombreuses scènes. Nous avons donc besoin de définir la scène avec laquelle nous commencerons, celle que Godot devra lancer en premier.

  1. Allez dans les réglages du projet (Projet > Paramètres sur projet)
  2. Dans la catégorie Général > Application > Run, sélectionnez le fichier de la scène de votre choix en cliquant sur l’icône du dossier.
    Godot : définir la scène principale
  3. Vous pouvez maintenant lancer votre jeu en cliquant sur le bouton Lancer le projet en haut de l’éditeur. Si vous aviez cliqué sur ce bouton avant de définir la scène, le logiciel aurait ouvert un panneau vous proposant de sélectionner la scène principale de votre projet.

La chauve-souris

Elle est le personnage principal de la scène. Nous allons créer une nouvelle scène pour elle. elle contiendra un Sprite (ou d’autres éléments visuels), une Caméra qui la suit et une zone de collision. Lors de la création de la scène, nous gardons à l’esprit les points suivants :

  • La chauve-souris aura peut-être certains paramètres qui permettront de modifier le gameplay : citons par exemple la vitesse, la gravité, la puissance du saut induit par l’action du joueur. Nous devons rendre ces réglages facilement modifiables pour laisser le Game Designer trouver le meilleur compromis et les tester facilement dans le jeu.
  • La chauve-souris devra pouvoir entrer en collision avec d’autres objets et pour cela, nous aurons besoin d’une zone de collision.
  • Nous aurons besoin d’animation pour les différents événements de la vie de notre personnage. Nous aurons besoin que ces animations interagissent avec un script, le cas échéant.

Avec ses informations en tête, nous avons une spécification technique que nous pouvons fournir à l’équipe pour cette scène :

  • Il doit y avoir un Node control nommé area. Le script recevra la taille de ce control pour calculer la collision.
  • Il doit y avoir un Node AnimationPlayer nommé animation, ainsi que deux animations nommé fly et die.
  • Il doit y avoir un Node Camera2D qui suit la chauve-souris ; attribuons 800 à la propriété Limit > Bottom pour que la camera ne suive pas le personnage dans sa chute.

Base player node tree dans godot

Nous avons ajouté tout ce qu’il faut dans la scène pour qu’elle fonctionne, pour le reste, c’est à l’équipe de s’en charger pour en faire quelque chose de bien en ajoutant des Nodes de différents types.

UI (interface)

La scène de l’UI montre les informations sur le jeu comme le score, les vies, les caractéristiques, etc. Dans notre cas, nous n’avons qu’un Node Label qui affiche le score actuel. Le code servira donc à appeler la Label et à changer ses valeurs.

Ui et node label dans Godot

Dans ce cas, nous utilisons un Node CanvasLayer en tant que racine et lui ajoutons un Label appelé points en tant qu’enfant. Utiliser un CanvasLayer au lieu d’un Node de base nous permet de définir librement la position z de l’interface graphique. L’interface est censée être placée au point 0, mais nous aurons aussi un fond en parallaxe. Définissions donc le calque sur 2 pour que l’interface reste toujours au premier plan.

Les obstacles

La scène des obstacles apparait dans le niveau principal. Leur scène contient 2 zones de dégât (une en haut et une en bas) et une zone de bonus au milieu. Si le joueur entre dans la zone de bonus, il gagne un point. Cette scène est très importante pour le Game Designer car elle comporte les paramètres de base de la difficulté. Pour vous assurer d’offrir aux Game Designer toutes les options dont ils ont besoin pour pouvoir personnaliser suffisamment l’expérience. Laissez-les vous surprendre !

Dans notre exemple, la scène des obstacles comporte les éléments suivants :

  • Un Node nommé obstacle_haut, pour l’élément du haut. Cet élément possède sa propre zone de dégât et son Sprite.
  • Un Node nommé obstacle_bas, avec l’élément du bas.
  • Un Node nommé point, avec la zone de bonus.
  • Les paramètres obstacle_haut_range et obstacle_bas_range pour contrôler la portée d’apparition des parties supérieurs et inférieur. Ces valeurs indiquent la position Y maximum et minimum que les deux parties peuvent avoir lorsqu’elles apparaissent. L’écart entre les deux représente la zone de bonus.

Optimiser le travail en instanciant les scènes des obstacles

Une fois que le jeu fonctionne, on peut continuer d’approfondir la production. Il est temps d’ajouter des objets à notre monde.

  1. Créez une nouvelle scène appelée obstacle_bas.tscn (car il va aussi falloir un obstacle en haut pour les nuages) et paramétrez-le ainsi :
  2. Ajoutez un Node Control area.
  3. Ajoutez quelques éléments visuels avec des fichiers images via les Nodes Sprites.
  4. Dans l’inspecteur, dans la propriété Texture, cliquez sur la liste située à droite de l’étiquette et choisissez Charger pour obtenir un navigateur de fichier dans lequel vous choisirez la bonne image
  5. Si vous avez besoin de définir la manière dont cette ressource est utilisée, cliquez sur le bouton > situé à droite du champ d’aperçu de la texture pour obtenir davantage de paramètres. Vous verrez en particulier le chemin du fichier et sa taille tels qu’ils sont utilisés dans notre Node.
  6. Sauvegardez la scène.

Maintenant que nous avons fait un premier élément, nous pouvons l’ajouter dans notre scène principale et l’utiliser selon les besoins.

  1. Créez un fichier de scène qui gérera les positions des deux obstacles
  2. Allez sur le panneau de gestion de l’arborescence de la scène. Comme le nouveau Node sera ajouté en tant qu’enfant du Node sélectionné, sélectionnez le Node racine.
  3. Cliquez sur le bouton Instancie un fichier de scène comme Node pour afficher une fenêtre et sélectionner la scène obstacles.tscn.
  4. Une fois fait, l’obstacle s’affiche dans l’arborescence de la scène et dans l’éditeur 2D.
  5. Instanciez cette nouvelle scène dans la scène principale, puis toute autre scène utile et ainsi de suite jusqu’à ce que toute la logique du jeu soit liée à la scène principale.

placement des obstacles

Le panneau de la scène affiche le nom de l’instance, sur le coté droit on retrouve le bouton ouvrir dans l’éditeur si le Node est une instance de scène pour ouvrir la scène dans une nouvelle fenêtre. Si on clique droit sur ce bouton, il est alors possible de cocher l’affichage l’arborescence des enfants du Node.

Nous en avons fini avec l’instanciation. On pourrait vraiment avoir l’impression d’avoir fait des copier-colles mais en utilisant cette méthode, chaque modification apportée aux scènes originales sera répercutée sur les instances. En terme de travail d’équipe, cela permet à tout le monde de travailler sur sa partie à son rythme sans avoir à se préoccuper des autres acteurs du jeu, ou de ne rien oublier. D’autres part, il est toujours important de vérifier que la scène principale fonctionne bien après d’importants changements.

La scène principale

La scène principale regroupe toutes les instances, dans cet exemple, cette scène sert d’écran de titre principal. Cette scène aura également la possibilité de notifier les événements qui se produisent pendant le jeu (les collisions entre les objets, custom event, etc.). Il y a plusieurs manières pour structurer votre jeu et votre communication entre les éléments du jeu. Les objets du jeu peuvent s’envoyer des messages entre eux et lancer des évènements depuis la scène principale. Ils peuvent également diffuser leur évènement par le biais des signaux auxquels les objets sont connectés ou bien envoyer des messages aux groupes. C’est à vous de décider, mais gardez à l’esprit que le Level Designer aura besoin d’un maximum de liberté pour instancier les objets dans le niveau.

Dans notre scène d’exemple, il y a deux animations : game_over et game_reset. Ils peuvent être utilisées pour montrer / cacher un menu ou pour montrer un message à l’utilisateur. (Allez au chapitre Animation pour en savoir plus sur la création d’animations).

Enfin, nous allons ajouter un Node ParallaxBackground (avec 1 :1 de dimension).

  1. Ajoutez un Node enfant ParallaxLayer.
  2. Définissez la propriété Motion > Mirroring à la taille de votre Sprite.
  3. Ajoutez un Node enfant Sprite.
  4. Définissez l’image de votre Background comme propriété de Texture.

main scene in godot

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.