Accueil logo MakeYourGame gachetteG gachetteD paddleG paddleH paddleD paddleB buttonG buttonH buttonD buttonB

Initiation à la 3D avec Godot Engine

Godot Engine

Ce cours est une initiation à la 3D pratiquée avec le moteur de jeu Godot Engine.

Au programme :
  •     Découverte de l'interface
  •     Découverte de la notion de Transform
36 min Débutant Godot Engine, contrairement à la plupart des moteurs du marché tels que Unreal Engine et Unity, utilise un moteur 2D dédié et distinct du moteur 3D. Ceci offre de nombreux avantages et contribue à la bonne réputation de Godot en ce qui concerne la 2D. Néanmoins, cet état de fait pourrait nous faire oublier que Godot a été crée au départ comme un moteur de jeu 3D (le moteur 2D dédié étant apparu plus tard). Aussi, bien que ses fonctionnalités dans ce domaine ne soient pas aussi nombreuses que chez la concurrence, le support de la 3D chez Godot est mature et vaut largement le détour. Dans ce cours, on vous propose de partir à la découverte de la 3D au sein de Godot Engine, aspect trop souvent délaissé par les débutants.
Attention, la 3D peut être un défi. Ce cours ne fera pas de vous un expert. Son but est simplement de vous initier à certaines bases de la 3D telle qu'elle se pratique au sein de Godot. Une bonne connaissance des bases de la 2D peuvent grandement aider.
Ce cours est basé sur la version 3.2.2 de Godot.
Bien que Godot soit en partie traduit en français, je me baserai sur la version anglaise de l'éditeur car la traduction française est incomplète et peu utilisée dans les tutoriels présents en ligne.
Je partirai du principe que vous avez déjà des bases dans l'utilisation de l'interface de Godot (en dehors de la partie 3D bien entendu https://makeyourgame.fun/sceditor/emoticons/wink.png )

Présentation du cours

Dans ce cours, nous reprendrons le thème d'un tutoriel déjà existant, consultable à cette adresse. L'intérêt est donc double puisque il permettra à ceux qui connaissent déjà Unity de mieux comprendre les différences et ressemblances entre les deux moteurs. Le thème du jeu est très simple : vous dirigez une balle devez récupérer des cubes éparpillés sur un plateau de jeu. Le résultat final est consultable ici. Voici tout de même un petit aperçu.
https://makeyourgame.fun/upload/users/cevantime/peek060720201621-5f05bf3aceb17.gif
Cependant, ce chapitre se concentrera essentiellement sur la découverte de l'interface de Godot ainsi que sur la manipulation d'un concept fondamental dans les jeu vidéo 3D : les transforms.

L'interface 3D

Se repérer

Commençons par créer un nouveau projet. Vous pouvez l'appeler Roll A Ball par exemple. Par défaut, c'est la vue 3D qui s'affiche. Vous n'avez donc rien à faire pour passer dessus. Si toutefois, elle n'est pas affichée chez vous, cliquez sur l'onglet 3D présent en haut de la fenêtre du moteur pour y accéder.
https://makeyourgame.fun/upload/users/cevantime/capturedu20200706170145-5f0dd2ce6ee79.png
Vous obtenez une vue ressemblant à ceci :
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706180115-5f0dd4534c163.png
Cette vue représente l'espace de votre jeu. C'est ici que vous visualiserez tous les éléments 3D de votre scène.
Cette vue ne contient que les éléments 3D. Pour visualiser d'autres éléments (comme votre UI par exemple) vous devrez passer sur la vue 2D.
Plusieurs choses à remarquer:
  • Trois axes sont tracés à l'écran. Ce sont les axes qui permettent de déterminer la position votre objet dans l'espace de jeu. En 2D, deux axes (2 Dimensions) suffisent à localiser un élément. En 3D, il en faut trois : l'axe X est en rouge, l'axe Y est en vert et l'axe Z est en bleu comme cela est rappelé par le gizmo en haut à droite de la fenêtre  https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706181333-5f0dd46338e89.png
  • L'espace est gradué par une grille présente au sol, à Y = 0.
  • L'espace est représenté par défaut en mode perspective car c'est ainsi que nous le percevons dans la vraie vie. Cependant il est parfois utile de le représenter en mode orthogonal (isométrique).
    Pour alterner entre le mode perspective et le mode orthogonal, cliquez sur https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706182531-5f0dd46f68bee.png en haut à gauche puis Orthogonal. Vous pouvez également appuyer sur la touche 5 de votre pavé numérique (si votre clavier en a un !).
Très important : contrairement au moteur 2d de Godot dans lequel l'unité de référence est le pixel, l'unité de référence dans le moteur 3D de Godot est le mètre. Chaque carré de la graduation fait donc 1x1m².

Se déplacer

Pour utiliser la vue 3D convenablement, il faut pouvoir s'y déplacer.

Zoomer/Dézoomer

Vous pouvez zoomer en faisant rouler vers l'avant la molette de votre souris. Ceci vous rapprochera du point situé au milieu de votre vue 3D. Pour dézoomer, faite rouler votre molette vers l'arrière. Si vous n'avez pas de molette. Maintenez le touche Ctrl enfoncée et déplacez votre souris vers le haut pour zoomer et vers le bas pour dézoomer.

Tourner autour

Pour tourner autour du milieu de votre vue 3D et l'examiner sous tous ses angles, maintenez  le clic sur la molette tout en déplaçant votre souris. Si vous n'avez pas de molette, maintenez enfoncés les deux boutons de votre souris. Vous avez également la possibilité de cliquer sur le gizmo  https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706181333-5f0dd46338e89.png présent en haut à droite pour obtenir le même effet.
Il est souvent utile de maintenir un certain angle de caméra, par exemple lorsque notre jeu est toujours en vue du dessus. Pour bloquer la rotation de la caméra et éviter de la tourner accidentellement, cliquez sur https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706182531-5f0dd46f68bee.png puis sur Lock View Rotation.

Se déplacer

Pour vous déplacer dans votre vue 3D, maintenez la touche shift (majuscule) enfoncée, maintenez le clic sur la molette tout en déplaçant votre souris (même chose que pour tourner autour mais avec shift en plus!). Si vous n'avez pas de molette, maintenez enfoncés les deux boutons de votre souris.

Changer d'axe

Il peut être également intéressant d'examiner votre scène selon les différents axes principaux (X, Y ou Z) : vue du dessus, vues de côté... Pour ce faire, Vous pouvez utiliser les touches 1, 3 et 7 de votre pavé numérique (respectivement pour les axes Z, X et Y), si vous en avez un. Sinon, vous pouvez cliquer sur les axes du gizmo https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706181333-5f0dd46338e89.png présent en haut à droite. Pour examiner vos axes dans l'autre sens, utiliser la touche Alt en plus des touches mentionnées plus haut. Par exemple : pour examiner votre scène d'en haut, appuyez sur 7. Pour l'examiner d'en bas, faites sur Alt+7.

Mode libre

Une autre manière de se déplacer consiste à utiliser le mode libre (freelook). Ce mode permet de se déplacer un peu comme on le ferait dans un jeu et est une bonne option si vous souhaitez faire un tour d'horizon de votre scène. Pour passer en mode libre, utiliser Shift + F.

Attention, si vous êtes sur un clavier AZERTY, il est probable que vous vouliez reconfigurer les touche permettant de se déplacer dans ce mode. Pour cela, allez dans le menu https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706192910-5f0dd48406158.png puis Editor Settings. Dans la section https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706193051-5f0dd48e4c5ec.png , vous trouverez les propriétés liées au mode freelook. Je vous conseille de changer les valeurs suivantes : freelook down -> A, freelook forward -> Z, freelook left -> Q

Dans ce mode, vous vous déplacez librement en utilisant les touches de déplacement "traditionnelles" (ZQSD en AZERTY). La manière la plus courante consiste à utiliser la touche permettant d'aller vers l'avant (Z en AZERTY) et de vous diriger grâce à la souris. Notez que vous pouvez accélérer en maintenant la touche Shift enfoncée. Vous pouvez même contrôler votre vitesse en faisant rouler la molette de votre souris (vers l'avant pour accélérer, vers l'arrière pour décélérer).

Ajouter/Inspecter/Manipuler des éléments 3D

Ajouter un nœud 3D

En Godot, tout est nœud. Les objets 3D que vous manipulerez ne font pas exception à la règle. Le nœud 3D le plus basique se nomme Spatial dans Godot.
Dans la prochaine version de Godot, la version 4, ce noeud sera renommé Node3D.
Ce nœud assez basique ne fait rien de spécial mais il possède tout de même une position dans l'espace (une transformation en fait, mais nous y reviendrons) et c'est un noeud qu'on utilise très souvent ! Il sert fréquemment de noeud racine à nos scènes 3D. Nous allons d'ailleurs cliquer sur https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706204338-5f0dd4c253de9.png et créer ainsi une scène basée sur un Spatial ! Vous pouvez renommer cette scène en Test3D par exemple.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706204724-5f0dd4ccde210.png
Néanmoins, comme ce nœud n'est pas visualisable, nous allons lui donner pour enfant un nœud de type MeshInstance (réseau de points définissant une forme dans l'espace). Les Mesh, comme les Spatial, ont une importance fondamentale puisque presque tout ce qui est visible dans votre scène est un Mesh (plus exactement, une instance de Mesh).
Souvent, vous ne créez pas vos mesh directement dans Godot mais plutôt en passant par un logiciel spécialisé de modélisation 3D comme Blender, 3DS Max ou encore Maya.
Ajoutons un Mesh à notre scène afin de pouvoir le manipuler. Ce Mesh sera un simple cube. Pour cela, nous allons cliquer sur le bouton https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706202530-5f0dd498af137.png présent en haut à gauche de notre hiérarchie de scène. Mettez vous à la recherche d'un noeud nommé MeshInstance.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706202822-5f0dd4a1d4c02.png
Ajoutez ce nœud à votre scène comme vous le feriez pour un nœud 2D. Renommez-le Cube si vous le souhaitez. Afin d'assigner une forme de cube à notre MeshInstance, nous devons cliquer sur la valeur de sa propriété Mesh dans l'inspecteur (empty pour l'instant).
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706203437-5f0dd4ab98f47.png
Sélectionner ensuite New Cube Mesh. Nous obtenons un cube, placé par défaut à l'origine du repère (l'intersection des trois axes), autrement dit la position (0, 0, 0).
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706203912-5f0dd4ba40262.png

Déplacer

Pour déplacer un élément, le plus simple est d'utiliser les flèches rouges, bleues et vertes apparues en même temps que le cube. Ces flèches permettent de modifier la position (translation en fait) de notre noeud 3D. 
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek060720202307-5f0dd6e6689f7.gif
Une autre manière de faire est de modifier directement la position de l'élément au sein de l'inspecteur. C'est bien utile quand on connait exactement la position que doit avoir notre élément.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706210312-5f0dd4ed410b2.png
Enfin, il est parfois intéressant (notamment pour éviter de sélectionner un élément par erreur), de passer en mode déplacement. Ce mode n'autorisant que le déplacement, il permet en prime de déplacer directement l'élément avec la souris. En pratique, on utilisera plus volontiers les flèches, plus précises. Pour passer en mode déplacement, pressez la touche W ou cliquez sur l'icône https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706214358-5f0dd4f8442b4.png.

Pivoter

Pour pivoter un nœud 3D, il suffit d'utiliser les cercles de rotation présents au même niveau que les flèches de déplacement. Cliquer sur un cercle afin de faire tourner l'objet autour de l'axe de même couleur.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek060720202206-5f0dd5135949f.gif
Il est également possible (et utile !) de changer la rotation d'un élément directement depuis l'inspecteur !
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706222739-5f0dd58d0e0b6.png
Les cercles de rotation permettent de faire pivoter les nœud 3D sur eux-mêmes, c'est-à-dire autour de leur origine (généralement au centre). Il est cependant assez fréquent de vouloir tourner un objet autour d'un autre point de pivot. Godot ne permet pas de déplacer le point de pivot d'un objet (à l'exception des Sprites). Pour obtenir ce résultat, l'astuce consiste à ajouter un nœud 3D parent et à faire pivoter ce nœud parent.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek060720202216-5f0dd56fa32a6.gif
De même qu'il existe un mode déplacement, il existe un mode rotation réservé uniquement à la rotation. Pour passer en mode rotation, appuyer la touche E ou encore cliquez sur le bouton https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706225753-5f0dd674b1a30.png.

Redimensionner (mettre à l'échelle)

La troisième et dernière opération possible avec un nœud 3D est de le redimensionner (ou plus exactement changer son échelle). Pour cela, vous devez passer en mode redimensionnement à l'aide de la touche R (Rescaling) ou du bouton https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706223004-5f0dd593d11c6.png. Les barres de redimensionnement apparaissent alors. 
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek060720202232-5f0dd60017fe7.gif
Naturellement, il est aussi possible de le faire depuis l'inspecteur.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706223436-5f0dd60f58366.png

Réinitialiser le déplacement

Parfois (souvent !), on souhaite réinitialiser la position d'un élément. Pour cela, il suffit de cliquer sur le bouton https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706225753-5f0dd674b1a30.png de la propriété qu'on souhaite réinitialiser (translation, rotation ou scale).

Contrôler les manipulations avec la grille

Bien souvent, on veut contrôler de manière plus régulière la manipulation des objets 3D. C'est le cas, par exemple, quand on crée un plateau où tous les éléments doivent être placés à la même hauteur, être espacés de manière rigoureuse etc. Godot permet de déplacer des éléments selon la grille graduée présente au sol. Pour déplacer/pivoter/redimensionner un élément selon la graduation, il suffit de le faire en maintenant la touche Ctrl enfoncée.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek060720202307-5f0dd6e6689f7.gif
Vous pouvez également utiliser le bouton https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706232629-5f0dd7291c736.png (activer le magnétisme).
S'il n'est pas possible (pour l'instant) de changer la graduation de la grille, il est possible de configurer le "pas" utilisé par l'objet au sein de la grille en allant dans https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706231224-5f0dd6f594a43.png puis Configure Snap. Ainsi, au lieu de forcer l'objet à se déplacer tous les mètres, vous pouvez le forcer à se déplacer tous les 0.5 * 1m = 50cm par exemple !

Rejoindre un élément

Très fréquemment, on a besoin de jeter un coup d'oeil à un élément de notre scène. Si notre scène est grande, rejoindre notre élément en s'y déplaçant peut s'avérer long. C'est pourquoi nous avons la possibilité de double cliquer sur l'élément en question dans la hiérarchie de scène afin de le rejoindre automatiquement.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek060720202240-5f0dd630e92a2.gif

Sélectionner un élément placé derrière un autre

Dans les scènes encombrées, il est fréquent d'avoir à sélectionner un objet situé derrière un autre. Godot prend en charge ce cas. Pour s'en convaincre, plaçons un deuxième cube dans notre scène situé entre notre œil le premier cube.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706231835-5f0dd70401121.png
Si maintenant, vous placez le curseur dans la zone du premier cube qui est cachée par le deuxième et que vous faites Alt + clic droit, vous avez la possibilité de choisir l'objet que vous souhaitez sélectionner.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek060720202322-5f0dd71213edf.gif
Le même effet peut être produit en cliquant sur le bouton https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200706232341-5f0dd71c8cf18.png. Nous avons fait le tour des fonctionnalités de base de l'interface 3D. Il en existe d'autres dont certaines seront vues dans les chapitres suivants !

Les transforms

Un autre élément capital pour comprendre comment fonctionne la 3D en Godot est de comprendre ce que sont les transformations 3D (Transforms dans la langue de Shakespeare).
Tous les nœuds 3D de Godot (ou Spatials) possèdent  une Transform. Naturellement, il en va de même pour tous leurs descendants (comme les Mesh par exemple).
La notion de Transform existe aussi en 2D dans Godot (on parle alors de Transform2D) mais elle est moins souvent utilisée qu'en 3D.

Ce que sont les transforms

Définition

Les transforms sont une manière commode de stocker toutes les informations utiles concernant le positionnement d'un objet dans l'espace, à savoir :
  • Sa position (ou plutôt, sa translation)
  • Sa rotation
  • Son échelle
Dans Godot, la notion de rotation et de mise à l'échelle sont regroupées au sein d'un même concept, appelé base (basis). Ainsi, dans Godot, une transform a deux composantes :
  • Une origine (origin) : sa translation.
  • Une base (basis) : sa rotation et sa mise à l'échelle.

Origine d'une transform

L'origine d'une transform correspond à la position ou translation dans l'espace.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu202007070105082-5f0dd7388452d.png
Pour représenter cette translation, nous avons besoin de ses trois composantes (représentées ci-dessus par des pointillés) : X, Y et Z. Dans Godot, cette information est stockée sous la forme d'un Vector3, une structure à 3 composantes (nos fameuses 3 dimensions).
Dans Godot, l'origine d'une transformation est stockée sous la forme d'un Vector3

Base (Basis) d'une transform

La base nous fournit comme information principale l'orientation de l'objet, ce qui revient presque à parler de sa rotation. Pour cela, elle a besoin de 3 vecteurs, lesquels peuvent être visualisés ci-dessous.
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200707012759-5f0dd740a9ac8.png
Ici, mon cube a subit une rotation et on voit bien que sa base propre est différente de la base du repère global.
Notez que cette représentation est facile à obtenir : il suffit de sélectionner le cube et de se mettre en mode Local Space à l'aide du bouton https://makeyourgame.fun/upload/users/cevantime/Initiation3d/capturedu20200707013254-5f0dd74a235cb.png ou encore de la touche T. Nous reviendrons sur cette notion de Local Space.
Pour représenter ces trois vecteurs côte à côte, Godot utilise une matrice 3x3 (3x3 composantes). Ces trois vecteurs portent aussi le nom de X, Y et Z mais ne sont pas les mêmes que ceux du repère global.
Une base est donc essentiellement une matrice 3x3, agrémentée de quelques fonctionnalités pratiques (comme la possibilité d'être convertie en Quaternion)
La base fournit également l'échelle de notre cube par la longueur de ses trois vecteurs:  lorsque l'objet n'est pas redimensionné, tous les vecteurs ont une longueur de 1. Si, par exemple, l'objet est étiré selon l'axe des X, la longueur du vecteur X sera supérieure à 1 et ainsi de suite.

Transform globale et transform locale

Deux types de transforms

En Godot, tous les nœuds 3D possèdent 2 transforms :
  • La transform globale indique le positionnement de l'objet relativement au contexte global de votre jeu. Autrement dit, sa position objective ou absolue. En pratique, il s'agit de la position de l'objet par rapport à la racine de votre scène.
  • La transform locale, par contre, se définit relativement au nœud parent.
Lorsque c'est possible, on privilégiera la transform locale. Pour comprendre pourquoi, voyons un exemple simple :

Exemple de la charette

Supposons que nous programmions un jeu où le joueur évolue à pied dans un monde ouvert. Une stratégie intéressante serait de placer ce joueur à la racine de la scène puisque celui-ci doit se déplacer de manière transverse au sein du monde. Dans ce cas, il n'y a pas de différence entre sa transform globale et sa transform locale. On peut manipuler sans risque la transform locale. Si maintenant, le joueur monte dans un véhicule qui se déplace (une charette par exemple), que fait-on ? Essayer de manipuler sa transform globale reviendrait à scripter le fait que le joueur doit avoir exactement la même vitesse que le véhicule. D'accord, mais que fait-on si le joueur se déplace à l'intérieur même de la charette ? Sa vitesse dans la charette va s'additionner avec celle de la charette elle-même (tout comme sa rotation etc.) Gérer ce cas "manuellement" en passant par la transform globale semble compliqué alors que cette chose est susceptible de se produire très souvent. Mais pas de panique, nous avons la possibilité de faire plus simple : nous pouvons reparenter notre joueur de façon à ce qu'il devienne enfant de la charette et non plus de la racine de notre scène. Ainsi, notre joueur suivra le mouvement de la charette sans qu'on ait rien à faire. Toutes manipulations faites sur sa transform locale n'auront un impact que dans le contexte de la charette (dans le référentiel charette) ce qui est généralement ce qu'on veut.
Lorsque c'est possible, il est préférable de manipuler les transforms locales des objets dans nos scripts
 

Récupérer les transforms dans un script

Disons-le tout net, comprendre comment utiliser des transform est l'une des clés qui vous permettra de développer en 3D. Même s'il s'agit d'un nouveau concept, qui exigera peut être de vous un effort de compréhension, un fois que vous aurez compris comment cela fonctionne, vous gagnerez énormément en confiance lorsque scripterez les déplacements de vos objets 3D. Car oui, les transforms sont essentiellement utiles lorsque vous voulez définir le comportement d'un objet grâce à un script (GDScript ou C# peu importe). Voyons comment on les manipule.

Récupérer les transform d'un noeud 3D

Rien de plus simple. Tous les noeuds 3D possèdent une transform locale et une transform globale, accessibles respectivement via les propriétés transform et global_transform en GDScript.

Récupérer l'origine et la base

Une fois de plus, élémentaire, mon cher. les transforms ont une propriété origin et une propriété basis.
# récupère la translation par rapport au parent
var origin = transform.origin

# récupère la base par rapport au parent
var basis = transform.basis

# récupère la translation globale
var global_origin = global_transform.origin

# récupère la base globale
var global_base = global_transform.basis

Manipuler les transform

Voyons quelques exemples simples d'utilisation des transforms au sein de nos scripts afin de comprendre comment elles fonctionnent.

Déplacer un objet

Très souvent, on souhaite déplacer un nœud dans une direction qui lui est relative (droit devant lui, sur sa gauche etc.). Sans transform, cela est très compliqué. Avec les transforms, un jeu d'enfant! Il suffit d'utiliser les directions fournies par sa base. En général, on convient du fait que la composante Z de la base est celle qui désigne le "devant" d'un nœud 3d. Déplacer un noeud 3D droit devant lui, par exemple, revient à faire ceci :
transform.origin += transform.basis.z * SPEED
où SPEED désigne un nombre exprimant la vitesse. Le faire reculer :
transform.origin -= transform.basis.z * BACK_SPEED
Notez le -= .
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201622-5f0dd75962cf6.gif
De même, pour le déplacer sur les côtés, on utilisera transform.basis.x
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201624-5f0dd7675aac5.gif
et verticalement transform.basis.y .
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201626-5f0dd7c1a545c.gif
Notez qu'un noeud 3D en Godot possède un méthode translate qui permet de le déplacer selon sa base propre (locale). Même si c'est transparent pour le développeur, il faut garder en tête ce qu'est une base en comprendre le fonctionnement réel.
translate(Vector3(1, 0, 0)) # déplace en fait selon le vecteur transform.basis.x
translate(Vector3(0, 1, 1)) # déplace selon le vecteur transform.basis.y et transform.basis.z
translate(Vector3(1, 2, 3)) # déplace selon les trois vecteurs de transform.basis
Le même résultat peut être obtenu de cette manière :
transform = transform.translated(Vector3(1, 0, 0))
Tous les codes peuvent aussi s'appliquer à global_transform !

Pivoter un objet

De la même manière que pour la translation, toutes les opérations pivotement (rotation) peuvent être effectuées avec une méthode présente dans les nœuds 3D : rotate
Attention toutefois car rotate effectue la rotation selon la base du noeud parent. Pour effectuer la rotation selon la base du nœud courant, il faut utiliser rotate_object_local
Ainsi, pour "faire la toupi", on utilisera :
rotate(Vector3(0,1,0), ROTATION_SPEED)
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201633-5f0dd7cb3215b.gif
Pour "faire des saltos" :
rotate(Vector3(1,0,0), ROTATION_SPEED)
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201638-5f0dd7d78c813.gif
Et "pour faire la roue" :
rotate(Vector3(0,0,1), ROTATION_SPEED)
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201639-5f0dd7e5af531.gif
Bien entendu, il est possible de jouer sur plusieurs composantes à la fois pour obtenir une rotation irrégulière.
Il faudra normaliser le vecteur passé en premier paramètre pour que cela fonctionne
rotate(Vector3(1,2,3).normalized(), ROTATION_SPEED)
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201643-5f0dd7f30bb6c.gif
Noez qu'il existe aussi des raccourcis pratiques tels que rotate_x , rotate_y et rotate_z pour permettre la rotation autour d'un axe en particulier.

Mettre à l'échelle

La mise à l'échelle est disponible via la méthode scale_object_local . Le code suivant multipliera par 2 la taille notre objet à chaque fois que la touche espace est enfoncée :
func _process(delta):
   if Input.is_action_just_pressed("ui_accept"):
      scale_object_local(Vector3(2, 2, 2))
https://makeyourgame.fun/upload/users/cevantime/Initiation3d/peek070720201659-5f0dd8006b0b4.gif

Conclusion

Voila tout pour les transforms et pour ce chapitre ! Si tout cela parait un peu théorique, bien comprendre comment fonctionnent l'interface ainsi que les transforms sont des conditions essentielles de votre réussite en 3D ! N'hésitez pas à revenir dessus si vous n'êtes pas sûr d'avoir compris (en particulier la dernière partie de cours).
Vues: 326

Connectez-vous pour applaudir applause logo 1 claps

Validation du Tutoriel

Veuillez vous connecter ou créer un compte pour pouvoir valider ce tutoriel et ainsi gagner stardust et XP !

×