Как заставить кинематическое тело (3d) следовать за игроком

Я делал FPS в Godot, и мне трудно заставить кинематическое тело (врага) двигаться к игроку. Может кто-нибудь помочь?


person SolerG0d    schedule 31.03.2020    source источник
comment
Не могли бы вы подробнее рассказать о том, что вы пробовали до сих пор, и в чем заключается ваша проблема? Какой код вы пробовали? В чем ошибка?   -  person Conor Neilson    schedule 01.04.2020


Ответы (1)


Самый простой способ сделать это - получить позицию игрока, сравнить ее с позицией врага и заставить врага двигаться к ней каждый кадр.

Полный пример кода внизу.

  1. Чтобы получить позицию игрока, вам сначала нужна ссылка на нее. Обычно это можно сделать, сохранив ссылку в глобальном синглтоне (автозагрузка) или путем разоблачения публичной собственности.

    • Если вы делаете это с глобальным синглтоном, вы получаете позицию, вызывая var player_position = my_singleton.player.global_transform.origin

    • Если вы используете экспортированное свойство, вы можете получить позицию, вызвав var player_position = get_node(path_to_player).global_transform.origin

  2. Когда у вас есть позиция игрока, вы можете сравнить ее с противником, написав var direction_to_target = player_position - global_transform.origin внутри узла врага.

  3. Теперь, чтобы следить за игроком, мы переопределяем метод _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

person Asherar Yam    schedule 07.04.2020