【问题标题】:Godot - Enemy does not move to player when player is on the leftGodot - 当玩家在左边时,敌人不会移动到玩家身边
【发布时间】:2022-02-04 11:51:14
【问题描述】:

当玩家在左侧时,我游戏中的敌人不会向左移动,而是会向右移动。然后当玩家在右边时,敌人会向玩家移动。

敌人的代码:

extends KinematicBody2D

var run_speed = 100
var velocity = Vector2.ZERO
var collider = null


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

func _on_DetectRadius_body_entered(body):
    collider = body

func _on_DetectRadius_body_exited(body):
    collider = null

【问题讨论】:

    标签: godot


    【解决方案1】:

    我怀疑您使用的是Area2D,它检测到的不是玩家角色。我提醒您可以使用collision_maskcollision_layer 来缩小检测到的对象的范围。 例如,您确定Area2D 没有检测到敌人本身吗?为了快速检查,您可以让 Godot 打印 collider 以仔细检查它是否符合您的期望。

    此外,请注意,当一个对象离开Area2D 时,它会将collider 设置为null,无论Area2D 内是否还有一些对象。我提醒您,另一种方法是使用get_overlapping_bodies

    当然,您可以查询每个body 以查看它是否是玩家角色(例如通过检查其节点组、名称、类等...)。我在another answer 中详细介绍了过滤。


    如果您正在获取玩家角色,还有另一个可能的问题来源:positionglobal_position。你有这样的代码:

    position.direction_to(collider.position)
    

    如果敌人和它得到的collider 具有相同的父级,则这是正确的。在这种情况下,它们的位置在同一个空间中。否则,您可能想要处理全局坐标:

    global_position.direction_to(collider.global_position)
    

    或者您可以将collider 位置带到本地坐标:

    position.direction_to(to_local(collider.global_position))
    

    当然,还要仔细检查Area2D 的位置是否正确。您可以在“调试”菜单中启用“可见碰撞形状”,从编辑器运行游戏时会显示它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-11
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      相关资源
      最近更新 更多