Un peu de 2D

Ma Motivation 💪
68%

La formation porte essentiellement sur la partie 3D en Godot, mais aujourd’hui elle nous apprend les bases de la 2D.

SIMPLE SCÈNE EN 2D

Mon objectif sera de réaliser une simple scène avec un sol et un carré que je pourrai déplacer à qui sera soumis aux lois de la physique.

Nous allons commencer par créer une scène Node2D qui sera notre niveau. Pour afficher les éléments du niveau lorsque nous exécutons le jeu, nous avons besoin d’une caméra. Le noeud est Camera2D. La plupart du temps, les noeuds en 3D et en 2D portent le même nom. Il n’y a que la valeur de la dimension qui change (3D ou 2D).

Après avoir bien positionné notre caméra, nous allons réaliser le sol du niveau. Pour cela, nous allons créer une nouvelle scène 2D avec Node2D.

Notre sol sera un élément qui ne bougera pas, mais qui à besoin d’une collision pour que le joueur ne tombe pas à travers lui. Pour cela, nous allons utiliser le noeud StaticBody2D.

Pour rappel,  StaticBody2D est utilisé pour les corps/objets qui ne se déplacent pas et qui sont tangibles.

StaticBody2D à besoin d’un CollisionShape2D et d’un Sprite.

Un sprite s’utilise à l’aide du noeud Sprite2D. Il permet d’afficher une texture en 2D. Cela peut être une trame d’animation d’une feuille de sprite ou encore une simple figure géométrique comme un rectangle.

Pour notre sol, je vais créer un Sprite2D qui aura comme texture GradientTexture2D. Il permet de faire un simple dégradé de couleurs.

Voilà mon sol : 

Sol dégradé

Autour de mon dégradé, il y a un rectangle bleu. C’est juste le CollisionShape2D.

LA SCÈNE DU JOUEUR

Maintenant, passons au joueur. Ici, je vais réaliser un simple sprite que nous pourrons déplacer.

Je vais créer une nouvelle scène qui aura comme noeud parent CharacterBody2D. Ce noeud est spécialisé dans le mouvement de personnage par script.

CharacterBody2D a besoin d’une texture à l’aide de Sprite2D et d’un CollisionShape2D.

Par défaut, chaque nouveau projet que vous allez commencer aura un fichier icon.svg qui correspond à l’icône du projet dans le choix de sélection des projets. L’icône est celle de Godot. 

icon

Je vais me servir de cette image comme texture pour mon joueur. Il suffit juste de glisser l’icône dans la case Texture ou de la glisser directement dans la fenêtre du jeu.

texture icon

Maintenant, il suffit d’appliquer un CollisionShape2D et de l’adapter à la taille de l’icône.

SCRIPT DE DÉPLACEMENT DU JOUEUR

Pour déplacer le joueur, nous allons avoir besoin d’un script. En Godot, il existe des scripts déjà implémentés selon le noeud choisi. Ici, notre joueur est de type CharacterBody2D. Quand nous créons le script, il nous propose de choisir un modèle : 

charactere body c#

Le modèle CharacterBody2D: Basic Movement permet comme son nom l’indique d’avoir des mouvements simples avec notre joueur. Nous pouvons nous déplacer de gauche à droite et sauter.

Voyons en détail le code :

using Godot;
using System;

public partial class joueur : CharacterBody2D
{
    public const float Speed = 300.0f;
    public const float JumpVelocity = -400.0f;

    // Get the gravity from the project settings to be synced with RigidBody nodes.
    public float gravity = ProjectSettings.GetSetting("physics/2d/default_gravity").AsSingle();

    public override void _PhysicsProcess(double delta)
    {
   	 Vector2 velocity = Velocity;

   	 // Add the gravity.
   	 if (!IsOnFloor())
   		 velocity.Y += gravity * (float)delta;

   	 // Handle Jump.
   	 if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
   		 velocity.Y = JumpVelocity;

   	 // Get the input direction and handle the movement/deceleration.
   	 // As good practice, you should replace UI actions with custom gameplay actions.
   	 Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
   	 if (direction != Vector2.Zero)
   	 {
   		 velocity.X = direction.X * Speed;
   	 }
   	 else
   	 {
   		 velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed);
   	 }

   	 Velocity = velocity;
   	 MoveAndSlide();
    }
}

Je vais détailler les points les plus importants : 

On utilise la fonction _PhysicsProcess() et non pas _Process() car elle est plus précise et mieux optimisée pour les objets physiques.

La variable Velocity contient la direction et la vitesse que nous allons donner au joueur.

La variable Input.GetVector(…) est un vecteur de direction qui devient positif ou négatif selon les touches que nous appuyons.

Math.MoveToward(…) permet de donner de l’inertie au joueur. Le joueur ne s’arrêtera pas directement quand nous relâchons une touche d’action. Il continuera de glisser un peu sur le sol.

MoveAndSlide() est la fonction principale du script. Il permet de faire déplacer le joueur. Il gère également les collisions et peut donc savoir si on est sur le sol ou pas. Il a juste besoin que nous renseignions la vélocité.

Velocity = velocity;
MoveAndSlide();

Ici, il faut bien comprendre qu’on utilise delta pour des valeurs qui durent dans le temps. Par exemple, quand on lâche un objet dans les airs, il tombe vers le sol et sa vitesse de chute augmente selon le temps qui s’écoule. Le temps qui s’écoule, nous pouvons le calculer grâce au temps écoulé entre deux frames : le delta.

Notre joueur peut aller de gauche à droite et sauter. Il retombera sur le sol grâce à la gravité.

 

Voilà ce qui conclut la première section de la formation que je suis sur udemy.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut