Преследование игрока

Проблема

Вы хотите, чтобы враг преследовал игрока.

Решение

Первый шаг для того, чтобы враг преследовал игрока, — определить, в каком направлении враг должен двигаться. Чтобы получить вектор, указывающий от точки A к точке B, нужно вычесть: B — A. Нормализуйте результат, и вы получите вектор направления.

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

velocity = (player.position - position).normalized() * speed

В Godot объект Vector2 имеет встроенную функцию для этого:

velocity = position.direction_to(player.position) * speed

Однако это позволит врагу преследовать игрока с любого расстояния, даже если он далеко. Чтобы исправить это, можно добавить к врагу Area2D и преследовать игрока только тогда, когда он находится внутри этого «радиуса обнаружения».

Вот пример кода:

extends CharacterBody2D

var run_speed = 25
var player = null

func _physics_process(delta):
    velocity = Vector2.ZERO
    if player:
        velocity = position.direction_to(player.position) * run_speed
    move_and_slide()

func _on_DetectRadius_body_entered(body):
    player = body

func _on_DetectRadius_body_exited(body):
    player = null

Мы подключили сигналы body_entered и body_exited от Area2D, чтобы враг знал, находится ли игрок в радиусе или нет.

Примечание
Вышеизложенное предполагает, что игрок — единственный объект, который будет входить/выходить, что обычно делается путем настройки соответствующих слоев и масок коллизий.

Эта концепция может быть расширена и для других типов игр. Главное — найти вектор направления от врага к игроку:

Если, например, ваша игра — это платформер или имеет другие ограничения в движении, вы можете использовать только x-компоненту результирующего вектора для определения движения.

Ограничения

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

Что делать, когда враг приближается к игроку, зависит от вашей игры. Вы можете добавить вторую, меньшую область, которая заставит врага остановиться и атаковать, или оттолкнуть игрока при контакте.

Другая проблема более заметна с быстро движущимися врагами. Когда игрок движется, враги, использующие эту технику, будут мгновенно менять направление. Для более естественного движения можно использовать алгоритмы управления.

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

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

8 + 12 =

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