Godot:area_entered() 信号未针对重叠区域触发

Godot: area_entered() signal not fired for overlapping areas

我有一个捕捉到瓦片地图网格的荧光笔 Area2D(想想指向特定瓦片的手电筒),我想让它使用 area_entered() 检测当前突出显示的区域和 area_exited() 信号:

# Highlighter.gd

extends Area2D

var highlighted_area

_on_Highlighter_area_entered(area):
    highlighted_area = area

_on_Highlighter_area_exited(area):
    highlighted_area = null


这是按预期工作的,除了当我从一个区域移动到重叠区域时。在这种情况下,退出信号会触发,但相邻(重叠)区域的进入信号不会触发,因此 highlighted_area 将卡在 null。见下图:

为什么重叠区域不触发输入信号?有什么想法可以让信号正常工作吗?

仔细检查 Area2Dmonitoringmonitorable 属性。

另外,请注意您在脚本中只存储了一个区域。因此,如果它注册了一个区域,而另一个区域进入,它将覆盖第一个区域。此外,如果存在一个区域,即使仍有区域重叠,您也将为空。

当然,您可以保留当前重叠区域的数组。


不过,我想提出一些不同的建议。如果您想找出给定点上有什么,可以使用 intersect_point。示例:

var space = get_world_2d().direct_space_state
var mouse_pos = get_global_mouse_position()
var results = space.intersect_point(mouse_pos, 32, [], 2147483647, false, true)
for result in results:
    print(result.collider)

这里我们要求最多 32 次碰撞,不排除 ([]),在每一层 (2147483647),不包括物体 false,以及包括地区 true.