Проблема
Вам нужно, чтобы игровой объект, например, питомец или миньон, следовал за персонажем.
Решение
Мы начинаем с добавления узла Marker2D к персонажу. Это будет представлять место, где питомец будет «находиться» рядом с персонажем.


В этом примере мы сделали его дочерним элементом узла Sprite2D, потому что код персонажа использует $Sprite2D.scale.x = -1
, чтобы перевернуть направление по горизонтали, когда персонаж движется влево. Поскольку маркер является дочерним элементом спрайта, он также будет переворачиваться.
Скрипт питомца
Вот скрипт для питомца:
Проверь свои знания в нашем бесплатном ТЕСТЕ по Godot! Узнай, насколько хорошо ты его знаешь!
extends CharacterBody2D
@export var parent : CharacterBody2D
var speed = 25
@onready var follow_point = parent.get_node("Sprite2D/FollowPoint")
Переменная parent
хранит ссылку на персонажа, за которым должен следовать питомец. Затем мы получаем узел FollowPoint
из этого персонажа, чтобы в методе _physics_process()
можно было получить его позицию:
func _physics_process(delta):
var target = follow_point.global_position
velocity = Vector2.ZERO
if position.distance_to(target) > 5:
velocity = position.direction_to(target) * speed
if velocity.x != 0:
$Sprite2D.scale.x = sign(velocity.x)
if velocity.length() > 0:
$AnimationPlayer.play("run")
else:
$AnimationPlayer.play("idle")
move_and_slide()
Если питомец находится близко к целевой точке, мы останавливаем его движение.
Преодоление препятствий
В зависимости от вашего мира, вы можете заметить, что питомец застревает на препятствиях. Для более надежного следования можно использовать навигацию.