I can't seem to remove SoftBody3D from Raycast Query

Godot Version

4.4

Question

I’m finding it impossible to remove my softbody3d from my raycast query how do I do it? Adding my softbody3d into the rid_array doesn’t remove it from the query.

@onready var soft_body_3d: SoftBody3D = $SoftBody3D
func hit_static() -> void:
	var start: Vector3 = soft_body_3d.global_position
	var end: Vector3 = start + Vector3(0, -100, 0)
	var mask_num: int = Globalmath.get_mask_num([1, 2])
	var data: Dictionary = Globalmath.castrays(soft_body_3d, start, end, mask_num, false, [])
	var data2: Dictionary = Globalmath.castrays(soft_body_3d, start, end, mask_num, false, [data.collider])
	print_debug("hit_static: start = ",start," data = ",data," data2 = ",data2)

func castrays(node: Variant, start: Vector3, end: Vector3, col_mask_num: int, hitareas: bool, rid_array: Array) -> Dictionary:
	var space_state = node.get_world_3d().direct_space_state 
	var query = PhysicsRayQueryParameters3D.create(start, end, col_mask_num, rid_array)
	query.collide_with_areas = hitareas
	#if rid_array != []:
	#	query.exclude = rid_array
	var result: Dictionary = space_state.intersect_ray(query)
	return result

You need to add the collider’s RID, .get_rid() works for other collision objects, but SoftBody3D is not a collision object, it has .get_physics_rid() which may work.

var data2: Dictionary = Globalmath.castrays(soft_body_3d, start, end, mask_num, false, [soft_body_3d.get_physics_rid()])
1 Like

Thanks that is exactly what I was looking for.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.