Я делал FPS в Godot, и мне трудно заставить кинематическое тело (врага) двигаться к игроку. Может кто-нибудь помочь?
Как заставить кинематическое тело (3d) следовать за игроком
Ответы (1)
Самый простой способ сделать это - получить позицию игрока, сравнить ее с позицией врага и заставить врага двигаться к ней каждый кадр.
Полный пример кода внизу.
Чтобы получить позицию игрока, вам сначала нужна ссылка на нее. Обычно это можно сделать, сохранив ссылку в глобальном синглтоне (автозагрузка) или путем разоблачения публичной собственности.
Если вы делаете это с глобальным синглтоном, вы получаете позицию, вызывая
var player_position = my_singleton.player.global_transform.origin
Если вы используете экспортированное свойство, вы можете получить позицию, вызвав
var player_position = get_node(path_to_player).global_transform.origin
Когда у вас есть позиция игрока, вы можете сравнить ее с противником, написав
var direction_to_target = player_position - global_transform.origin
внутри узла врага.Теперь, чтобы следить за игроком, мы переопределяем метод
_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