Самый простой способ сделать это - получить позицию игрока, сравнить ее с позицией противника и заставить противника двигаться к ней каждый кадр.
Полный пример кода находится внизу.
Чтобы получить позицию игрока, вам сначала нужно сослаться на нее. Обычно это можно сделать, сохранив ссылку в глобальном синглтоне ( autoload ) или выставив свойство publi c.
Если вы делаете это с глобальный синглтон, тогда вы получите позицию, позвонив var player_position = my_singleton.player.global_transform.origin
Если вы используете экспортируемое свойство, то вы получите позицию, позвонив var player_position = get_node(path_to_player).global_transform.origin
Когда у вас есть позиция игрока, вы можете сравнить ее с противником, написав var direction_to_target = player_position - global_transform.origin
изнутри вражеского узла.
Теперь чтобы следовать за игроком, мы переопределяем метод _physics_process
примерно так:
### Inside the enemy script
var ENEMY_SPEED= 50
func _physics_process(delta):
var player_position = my_singleton.player.global_transform.origin
var direction_to_target = (player_position - global_transform.origin).normalized() # We normalize the vector because we only care about the direction
move_and_slide(direction_to_target * ENEMY_SPEED) # We multiply the direction by the speed