Как заставить тело kinemati c (3d) следовать за игроком - PullRequest
0 голосов
/ 31 марта 2020

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

1 Ответ

0 голосов
/ 07 апреля 2020

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

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

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

    • Если вы делаете это с глобальный синглтон, тогда вы получите позицию, позвонив 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

...