đŸ CrĂ©er un ennemi qui patrouille entre deux points dans Godot 4.4
Ce guide fait partie de mon journal de progression Godot RPG đ§Ș
Il dĂ©crit comment jâai créé un slime qui se dĂ©place automatiquement entre deux points, avec des animations mignonnes et une personnalisation facile âš
đŻ Objectif
Créer un ennemi (ex: slime) capable de :
- Se déplacer automatiquement entre deux points
- Jouer une animation de déplacement cohérente (haut/bas/gauche/droite)
- Ătre personnalisable via lâinspecteur (axe, vitesse, sens)
- Réagir quand il arrive au bout (il change de direction)
đ§ Script complet
extends CharacterBody2D
@export var speed = 20
@export var limit = 0.5
@export var endPoint: Marker2D
@export var movement_axis: Vector2 = Vector2.RIGHT # Nouvelle variable pour définir l'axe de mouvement
@onready var animations = $AnimatedSprite2D
var startPosition
var endPosition
func _ready() -> void:
startPosition = position
endPosition = endPoint.global_position
func changeDirection():
var tempEnd = endPosition
endPosition = startPosition
startPosition = tempEnd
func updateVelocity():
var moveDirection = (endPosition - position)
if moveDirection.length() < limit:
changeDirection()
velocity = moveDirection.normalized() * speed
func updateAnimation():
var animationString = "walk_"
if abs(velocity.x) > abs(velocity.y):
animationString += "right" if velocity.x > 0 else "left"
else:
animationString += "down" if velocity.y > 0 else "up"
if animationString in animations.sprite_frames.get_animation_names():
animations.play(animationString)
else:
animations.play("walk_down") # Animation par défaut si l'animation spécifique n'existe pas
func _physics_process(delta: float) -> void:
updateVelocity()
move_and_slide()
updateAnimation()
âš Explications
ĂlĂ©ment | RĂŽle |
---|---|
@export var speed |
DĂ©finit la vitesse de dĂ©placement de lâennemi |
@export var limit |
Distance en-dessous de laquelle lâennemi inverse sa direction |
@export var endPoint |
Le point cible que lâennemi doit atteindre (souvent un Marker2D ) |
@export var movement_axis |
Permet dâorienter diffĂ©remment lâennemi (par dĂ©faut Ă droite) |
animations.play() |
Joue automatiquement la bonne animation selon la direction |
changeDirection() |
Intervertit startPosition et endPosition pour faire des allers-retours |
đš Animations requises
Ton AnimatedSprite2D
doit contenir les animations suivantes :
walk_up
walk_down
walk_left
walk_right
Sinon, le slime jouera lâanimation walk_down
par dĂ©faut sâil ne trouve pas la bonne.
đ§Ș Astuce bonus
Tu peux créer plusieurs slimes différents dans ton jeu simplement en :
- Modifiant la
vitesse
- Changeant le
endPoint
dans lâĂ©diteur - Changeant lâaxe (
movement_axis
) si tu veux quâun slime se dĂ©place verticalement ou en diagonale đ
đ Date de rĂ©daction
Guide rédigé le 12/04/2025
đŸ Ce guide fait partie de mon projet de RPG Godot 4.4.
Dâautres guides sont disponibles ici :
đ Retour Ă lâaccueil