Следующий за игроком питомец

Проблема

Вам нужно, чтобы игровой объект, например, питомец или миньон, следовал за персонажем.

Решение

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

В этом примере мы сделали его дочерним элементом узла Sprite2D, потому что код персонажа использует $Sprite2D.scale.x = -1, чтобы перевернуть направление по горизонтали, когда персонаж движется влево. Поскольку маркер является дочерним элементом спрайта, он также будет переворачиваться.

Скрипт питомца

Вот скрипт для питомца:

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()

Если питомец находится близко к целевой точке, мы останавливаем его движение.

Преодоление препятствий

В зависимости от вашего мира, вы можете заметить, что питомец застревает на препятствиях. Для более надежного следования можно использовать навигацию.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

двенадцать − 9 =

Прокрутить вверх