I am quite new to Godot and have been struggling to figure out how to get an enemy, move toward the player in certain box (the game is 2d/side view). The first thing I did was create a character body 2d, with collision shape 2d, and animated sprite. I put in the sprites for the enemy. Then I added an area 2d with collision shape 2d. I stretched the collision shape 2d to make a rectangle that when the player enters I want the enemy to move towards the player. How should I do this?
Enemy moves to player.
- Edited
Here is the code I use for reference, Godot 4
var speed = 100
var velocity = Vector2()
var chase = false
var player
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
func _physics_process(delta):
Apply gravity
velocity.y += gravity * delta
# Check if chasing the player
if chase:
if player == null:
player = get_node("../../player/player")
var direction = (player.position - position).normalized()
$Sprite.flip_h = direction.x < 0
velocity.x = direction.x * speed
else:
velocity.x = 0
# Move using the computed velocity
move_and_slide(velocity, Vector2.UP)
Signal function when player enters detection area
func _on_PlayDetection_body_entered(body):
if body.name == "Player":
chase = true
Signal function when player exits detection area
func _on_PlayDetection_body_exited(body):
if body.name == "Player":
chase = false
you can create a variable that is equal to the player and tell it to go to the left if the player's position is greater than the enemy's and to the right if it is less than the enemy's position
basic example:
@onready var player = get_tree().get_nodes_in_group("player")[0]
if global_position.x > player.global_position.x:
velocity.x = - speed
elif global_position.x < player.global_position.x:
velocity.x = + speed
else:
velocity.x = 0
sorry for error in the syntax of this message I'm using translator