Godot 3.3.3
使用代码的方式进行检测区域内的碰撞节点
extends Node2D
var shape_cicle := CircleShape2D.new() # 圆形碰撞形状
func _ready():
# 输出坐标 (200,200) 大小为 100 的区域的碰撞节点的个数
print(get_layer_node(100, Vector2(200, 200)))
func get_layer_node(radius, pos:Vector2):
"""获取 pos 范围内的碰撞节点
@radius 圆形半径范围
@pos 位置
"""
# 设置碰撞形状
shape_cicle.radius = radius
# 新建 Physics2DShapeQueryParameters 并配置
var p = Physics2DShapeQueryParameters.new()
p.set_shape(shape_cicle) # 设置碰撞形状
p.collide_with_areas = true # 监测 Area 区域
p.collision_layer = 1 # 对应被检测物体的 layer 层级
p.transform = Transform2D(0, pos) # 设置碰撞的位置
# 检测碰撞
var arr = get_world_2d().direct_space_state.intersect_shape(p)
return arr # 返回碰撞结果