View on GitHub

Zelda-Like Creation Guide

Un guide complet pour créer un jeu de type Zelda avec Godot Engine.

🍄 CrĂ©er un systĂšme de Collectables dans Godot 4.4

Dans cette leçon, nous allons apprendre Ă  crĂ©er un systĂšme de collectables (comme des potions, des piĂšces ou d’autres objets Ă  ramasser) dans notre RPG Zelda-like. 🎼✹

Nous allons procéder par étapes pour bien comprendre chaque concept.


📌 Objectif

CrĂ©er un Collectable qui disparaĂźt lorsqu’il est ramassĂ© par le joueur, grĂące Ă  un script simple.

📁 PrĂ©paration


🌟 Étape 1 : CrĂ©ation de la scĂšne Collectable

  1. Crée une nouvelle scÚne en tant que Area2D.
  2. Renomme-la Collectable.
  3. Ajoute un Sprite2D en tant que child de Collectable.
  4. Ajoute un CollisionShape2D en tant que child de Collectable.
  5. Sélectionne CollisionShape2D et clique sur Make Unique pour la rendre indépendante.
  6. (Important !) Cela permet de modifier chaque CollisionShape2D séparément pour chaque objet que tu créeras à partir de ce template.

🎯 Ta hiĂ©rarchie devrait ressembler Ă  ceci :

Collectable (Area2D)
├── Sprite2D
└── CollisionShape2D

✍ Étape 2 : Ajouter le script de collectable

  1. Ajoute un nouveau script au noeud Collectable avec le code suivant :
extends Area2D

func collect():
    queue_free()

📌 Ici, la mĂ©thode collect() va supprimer (queue_free()) l’objet dĂšs qu’il est ramassĂ© par le joueur.


📂 Étape 3 : CrĂ©er un Template d’Item

  1. Sauvegarde ta scÚne Collectable dans ton dossier dédié : collectables/.
  2. Clique sur Scene > New Inherit Scene pour créer un nouvel objet basé sur Collectable.
  3. Ajoute un Sprite pour représenter ton item (ex: potion).
  4. Clique sur CollisionShape2D et clique sur Make Unique pour pouvoir modifier sa forme indépendamment des autres objets.
  5. Ajuste la CollisionShape2D pour correspondre au sprite.
  6. Sauvegarde cette scÚne spécifique (par exemple, Potion.tscn) dans ton dossier collectables/.

✅ En rendant chaque CollisionShape2D unique (Make Unique), tu pourras facilement ajuster les collisions pour chaque type d’objet.


đŸ—ș Étape 4 : DĂ©tection de la collecte par le joueur

  1. Ajoute un Area2D nommé HurtBox au noeud Player.
  2. Ajoute un CollisionShape2D en tant que child de HurtBox.
  3. Crée un signal pour détecter les collisions :
func _on_hurt_box_area_shape_entered(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) -> void:
    if area.has_method("collect"):
        area.collect()

📌 Cela signifie que lorsque ton joueur dĂ©tecte une Area2D qui possĂšde une fonction collect(), elle sera supprimĂ©e ! 🎉


🌟 Étape 5 : CrĂ©ation d’une ScĂšne Collection avec TileMap

  1. Crée un nouveau TileMap Layer sous ton noeud principal (par exemple, Campagne).
  2. Renomme ce TileMap en Collectables.
  3. Dans l’inspecteur, clique sur Tile Set et appuie sur le bouton + Ă  cĂŽtĂ© de la poubelle en bas Ă  gauche.
  4. Sélectionne Scene Collection et renomme-la en Collectable.
  5. Fais glisser tes scÚnes de collectables (par exemple life_pot.tscn et sword.tscn) dans la zone prévue pour les ajouter à ta collection.
  6. Maintenant, tu peux facilement placer ces objets collectables directement sur ta carte en cliquant et en les positionnant ! 🎉

đŸ—Ąïž Étape 6 : CrĂ©ation de l’ÉpĂ©e (Sword) avec Animation

🎉 Nous allons maintenant ajouter une Ă©pĂ©e qui s’anime quand Elara la ramasse !

🔹 CrĂ©ation de l’ÉpĂ©e

  1. Crée une nouvelle scÚne héritée de Collectable (clic droit sur Collectable > New Inherit Scene).
  2. Renomme-la Sword.
  3. Ajoute un sprite d’épĂ©e (si tu utilises une spritesheet : New Atlas Texture > Edit Region > Active Pixel Snap > SĂ©lectionne l'Ă©pĂ©e).
  4. Ajoute un AnimationPlayer au noeud Sword.

đŸ’Ÿ CrĂ©ation de l’Animation

  1. Renomme l’animation en "spin".
  2. Sur la timeline, mets une durée de 0.4 secondes.
  3. SĂ©lectionne l’épĂ©e et clique sur Rotation dans l’inspecteur (Transform > Rotation).
  4. À 0 seconde, ajoute une clĂ© (icĂŽne de clĂ©).
  5. À 0.2 seconde, fais lĂ©gĂšrement pivoter l’épĂ©e et ajoute une nouvelle clĂ©.
  6. À 0.4 seconde, remets l’épĂ©e dans sa position initiale et ajoute une clĂ©.

📜 Script de l’ÉpĂ©e

  1. CrĂ©e un nouveau script en l’attachant au Sword.
  2. DĂ©place le script collectable.gd en tĂȘte d’extension avec :
extends "res://scenes/collectables/collectable.gd"

@onready var animation: AnimationPlayer = $AnimationPlayer

func collect():
    animation.play("spin")
    await animation.animation_finished
    super.collect()

💡 Explication :


✅ Conclusion

✹ Bravo ! Tu viens d’ajouter un nouvel objet dynamique avec une animation au ramassage ! 🎉

On peut maintenant ajouter des Ă©pĂ©es, des potions, et bien plus Ă  notre jeu. 🌈