我一直在Godot中制作FPS,但我很难让运动机构(敌人)向玩家靠近。有人可以帮忙吗?
最简单的方法是获得玩家的位置,将其与敌人的位置进行比较,并使敌人每帧朝其移动。
完整的示例代码在底部。
要获得玩家的位置,您首先需要引用它。通常,您可以通过将引用存储在全局单例(autoload)中或公开公共属性来执行此操作。
如果要使用全局单例,则可以通过调用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