【Godot】纯代码检测某个区域的碰撞节点

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  # 返回碰撞结果

发表评论