I made a script for an enemy that follows the player. The script works, but when the player is under the enemy, the enemy sticks on to the player and the player can't move. When the player touches the enemy from any other side this doesn't happen.

Enemy script:

extends CharacterBody2D

var speed = 4000
var target = Node2D
var enemy = Node2D
var player_node = null

func _ready():
    player_node = get_node("/root/World/Player")

func _physics_process(delta):
    target = player_node.position
    enemy = self.position
    var direction = (target - enemy).normalized()
    velocity = direction * speed * delta

    move_and_slide()

Player script:

extends CharacterBody2D

var speed = 400

func _physics_process(delta):
    var directionx = Input.get_axis("ui_left", "ui_right")
    if directionx:
        velocity.x = directionx * speed
    else:
        velocity.x = move_toward(velocity.x, 0, speed)

var directiony = Input.get_axis("ui_up", "ui_down")
if directiony:
    velocity.y = directiony * speed
else:
    velocity.y = move_toward(velocity.y, 0, speed)

velocity = velocity.normalized()
velocity = velocity * speed

move_and_slide()

Godot v4.0.2.stable

Try to create an immunity variable for the player at the time of colliding with the enemy (sorry for a syntax error in this message but I'm using google translate)

2 months later