Ce cours détaille la mise en place des éléments de notre scène. Au programme :
- Description et utilisation de quelques nœuds 3D de base (StaticBody, Area, RigidBody et Camera)
- Mise en place du sol, de murs, d'une balle et contrôle de cette dernière ainsi que de la caméra
Dans le cours précédent, nous avions vu les bases de la 3D avec Godot en découvrant l'interface ainsi que la notion de Transform. Il est grand temps de passer à la pratique en démarrant notre premier jeu : Roll The Ball 3D !
Pour ajouter un material à notre sol, nous allons aller dans son MeshInstance enfant et lui assigner un SpatialMaterial.
Cliquez sur le material nouvellement crée et modifiez la couleur de son albedo, en bleu par exemple.
Notre sol se démarque mieux maintenant !
Il y a énormément de propriétés que vous pouvez modifier sur votre material. Il est même possible de personnaliser entièrement le rendu en utilisant un Shader Material même si il faudra être en mesure d'écrire des shaders pour exploiter cette possibilité.
Pour plus dinformations concernant les materials en Godot, rendez-vous ici.
Notre balle est donc un RigidBody. Ajoutons-la à notre nœud Level. Comme pour les éléments statiques, nous commençons par lui ajouter un MeshInstance qui cette fois-ci aura pour Mesh une SphereMesh.
Pour l'instant, notre balle est enfoncée dans le sol. Mettons sa translation y à
Présentation du jeu
Roll the ball est un jeu dans lequel le joueur fait rouler une balle sur un plateau. En roulant, la balle doit ramasser des éléments flottant au dessus du sol. Lorsque tous les éléments ont été ramassés, le joueur gagne. Un jeu très simple, mais qui constitue une bonne entrée en matière concernant tout ce qui touche à la 3D. Évidemment, si à l'issue de ce tutoriel, vous ressentez l'envie d'aller plus loin, on peut imaginer créer des niveaux plus complexes, chronométrer la partie et faire un tableau des meilleurs temps mais pour ce tutoriel, on se contentera des fonctionnalités de base. Je rappelle que ce jeu est calqué sur celui proposé par ce tuoriel Unity. Il peut être intéressant de faire les deux et d'étudier les différences si vous voulez progresserMise en place du niveau
Description
Commençons sans attendre en créant un nouveau projet avec Godot (appelons-le RollTheBall, par exemple). Créons ensuite une première scène qui contiendra notre niveau. Cette scène sera une scène 3D, donc vous pouvez dès à présent cliquer sur pour créer un Spatial racine. Nommez-le Level, par exemple. Sauvegardez-le dans un fichier Level.tscn. Le niveau en lui-même sera constitué :- d'un sol tout simple (pour éviter que la balle ne tombe, bien sûr)
- de quatre murs entourant le niveau (toujours pour éviter que la balle ne tombe, lorsqu'il n'y a plus de sol !)
Le sol
Créez un nouveau nœud de type StaticBody comme enfant de votre nœud Level. Lorsque nous faisons cela, aucune forme n'est encore ajoutée à notre niveau et Godot nous avertit d'un potentiel problème : Par défaut, notre StaticBody n'a pas de forme. Pour faire en sorte que ce soit le cas, nous devons créer un CollisionShape (une forme physique solide) dans notre StaticBody. Néanmoins, nous allons repousser la création de notre Shpae et commencer par créer un nœud de type MeshInstance comme enfant de notre StaticBody. Ce nœud permettra de donner une forme visuelle à notre sol avant d'en déduire sa forme physique. Créons ce MeshInstance. Comme vu dans le [course=141]chapitre précédent[/course], nous devons ensuite assigner un Mesh à notre MeshInstance. Pour notre sol, nous utiliserons un PlaneMesh : Pour l'instant, notre sol est trop petit. Pour modifier sa taille, nous allons le redimensionner. Comme vu dans le chapitre précédent, il existe plusieurs manières de faire cela. Pour ce tutoriel, nous changerons directement les valeurs dans l'inspecteur. Sélectionnez votre MeshInstance dans la hiérarchie et fixez directement les valeurs x et z de sa transform à30
dans l'inspecteur.
Nous obtenons un sol 30 fois plus étendu !
Maintenant que le forme visuelle du sol est bonne, créons sa forme physique. Pour cela, sélectionnez à nouveau notre MeshInstance et cliquez sur le bouton
qui apparaît au dessus de notre scène. Cliquez ensuite sur Create Single Convex Collision Sibling pour créer une collision shape placée au même niveau que la MeshInstance.
Notre sol a désormais une collision shape, c'est-à-dire une forme solide !
Bien ! notre sol est bien avancé, renommons-le Ground. Votre hiérarchie devrait être celle-ci :
Les murs
Créons maintenant nos murs en suivant une méthode proche de celle du sol. Ajoutez un StaticBody comme enfant de Level et créez-y un MeshInstance. Notre MeshInstance aura pour Mesh un CubeMesh. Fixez la scale selon l'axe z de notre MeshInstance à31
de façon à lui faire prendre toute la longueur du sol. Augmentons aussi sa hauteur en modifiant sa scale y en
2
.
Sélectionnez cette fois votre StaticBody et donnez-lui la translation
31
selon l'axe x de façon à ce que notre mur apparaisse à l'extrémité Est de notre sol.
Bien ! notre mur est bien placé. Créons maintenant une CollisionShape pour notre mur de la même manière que pour notre sol (Bouton
puis Create Single Convex Collision Sibling). Par défaut, Godot crée un ConvexPolygonShape car c'est la Shape la plus générique. Cela dit, pour notre mur, nous n'avons besoin que d'un BoxShape. Vous pouvez changer la shape de votre CollisionShape dans l'inspecteur.
Parfait, notre mur Est est terminé. Appelons-le East.
Les trois autres murs que nous allons créer sont identiques à celui-ci. Pour les créer, nous nous contenterons de le dupliquer et de repositionner les trois copies. Sélectionnez le nœud East, et dupliquez-le à l'aide de Ctrl + D. Renommez le nœud copié en West et modifiez sa translation x en
-31
.
Les murs South et North seront eux-aussi des copies du nœud East. Modifiez leur positionnement ainsi :
- South : translation x = 0, rotation y = 90 et translation z = 30
- North : translation x = 0, rotation y = 90 et translation z = -30
Ces petites manœuvres organisationnelles peuvent paraître superflues mais deviennent souvent nécessaires sur le long terme.
Changement de couleur du sol
Pour l'instant notre sol est de la même couleur que nos murs. Remédions-y ! Pour cela, nous allons ajouter un material à notre sol.Un material définit le rendu de la surface d'un objet, qui peut donner au joueur l'illusion que l'objet possède une certaine matière (métal, verre, bois etc.) ou plus simplement une couleur.
Création de la balle et des collectibles
Les nœuds dynamiques
Nous avons mis en place les éléments statiques de notre niveau. Nous allons maintenant ajouter les acteurs de notre scène, à savoir la balle et les éléments à ramasser, que nous appellerons collectibles. Ces éléments seront dynamiques dans ma scène, c'est-à-dire des éléments qui bougent. Godot possède plusieurs nœuds pour permettre de créer des éléments dynamiques en 3D. Le choix du bon nœud dépend une fois de plus du comportement que doit avoir mon nœud dans ma scène. Voyons les options principales qui s'offrent à nous pour les éléments dynamiques :- Area : Zone de l'espace non solide utilisée en général pour détecter l'intrusion d'un objet dans un endroit et pouvoir y réagir. Autre aspect intéressant, l'Area permet de modifier certaines propriétés physiques localement comme la gravité.
- RigidBody : Objet solide de l'espace qui réagit physiquement de manière réaliste aux collisions ainsi qu'à la gravité. Le contrôle de ces nœuds ne se fait pas en modifiant directement leur position (leur transform, en fait) mais en y appliquant des forces, des impulsions et des torques.
- KinematicBody : Objet solide de l'espace qui ne réagit pas physiquement aux collisions ou à la gravité mais peut tout de même se mouvoir. En outre, les KinematicBody offrent des méthodes telles que
move_and_slide
etmove_and_collide
qui leur permettent de bouger sans traverser les autres objets solides.
La balle : un RigidBody
Notre balle devra :- entrer en collision avec le sol et les murs, il s'agit donc d'un élément solide ce qui restreint les choix possibles à KinematicBody ou RigidBody.
- rouler sur le plateau de manière de réaliste : le meilleur choix semble être un RigidBody
Kinematic ou Rigid ? Il peut être assez délicat de répondre à cette question. On utilise le plus souvent un kinematic quand on veut un contrôle plus étendu et plus simple sur la manière dont notre élément bouge et intéragit avec les autres éléments de la scène, souvent quand le réalisme physique importe assez peu.
Contrairement à ce qu'on croit parfois, Kinematic et Rigid peuvent cohabiter au sein d'une même scène sans problème à condition de scripter leur collision.
1
pour la faire ressortir (sur le RigidBody et non sur le MeshInstance !). Nous allons également changer sa couleur comme nous l'avons fait pour le sol. Nous pourrions choisir une couleur unie pour pour le sol mais il est sans doute plus intéressant de choisir une texture moins unie. Cela permettra au joueur de mieux se rendre compte du mouvement de la balle (sa vitesse, son mouvement etc.)
Ainsi, assignez un nouveau SpatialMaterial à votre MeshInstance et, à la place de la couleur de l'albedo, modifiez sa texture en utilisant celle-ci.
Nous obtenons (#Voltorb #POKéBALL):
Nous pouvons maintenant donner à notre balle une CollisionShape en cliquant sur
puis Create Single Convex Collision Sibling. Vous devriez également modifiez la Shape en SphereShape plutôt que Convex.
Notre balle a fière allure, renommons-la Ball et passons aux collectibles.
Les collectibles : des Area
Les collectibles sont des éléments qui devront :- flotter et tourner sur eux-même au dessus du sol. Pas besoin d'en faire des RigidBody a priori.
- disparaître au moment où la balle les touche. Pas besoin d'en faire des éléments solides, donc.
1
. Ainsi, tous les Pickups que nous ajouterons à ce Spatial seront situés par défaut à la hauteur de la balle !
Pour ajouter un Pick Up à votre Spatial Collectibles, sélectionnez-le et cliquez sur le bouton
. Sélectionnez ensuite votre scène Pick Up.tscn.
Vous pouvez ainsi dispatcher plusieurs collectibles sur votre scène en dupliquant ce premier Pick Up (Ctrl + D) et en utilisant les flèches de déplacements rouges et bleues (x et z).
Bien, les différents éléments de notre scène sont en place !