Godot Version
4.4.1
Question
Hi everyone!
I’m trying to use the function intersect_shape to query bodies on layer 2. However, when I set the collision_mask attribute to 2, the query gets bodies on other layers except the one expected. What am I doing wrong?
Here’s the piece of code where I run the query:
extends Sprite2D
class_name Bullet
var speed: float
var speed_curve: Curve
var speed_randomized: float
var direction: Vector2
var time: float
var lifetime: float
var collision_mask: int = 1
@export var shape: Shape2D
var query := PhysicsShapeQueryParameters2D.new()
@onready var state := get_world_2d().direct_space_state
func _ready() -> void:
query.set_shape(shape)
query.collide_with_bodies = true
func _process(delta):
time += 0.01
if time > lifetime:
finish()
position += direction * speed * delta * speed_curve.sample(time) * speed_randomized
query.collision_mask = collision_mask
query.transform = global_transform
var result = state.intersect_shape(query, 1)
if result:
for i in result.size():
if result[i].collider.name == "Player":
result[i].collider.on_hit()
finish()
func finish():
set_process_mode(PROCESS_MODE_DISABLED)
hide()
Source code: Making sure you're not a bot!