Zuerst setzt du auf deine Camera oder von wo aus du "darauf schaust" einen Raycast3D-Node und stellt Richtung und Entfernung ein. In deinem Script aus dem du den Player steuerst fügst du eine Funktion ein um zu prüfen ob der Raycast auf etwas trifft wenn du auf einen Button klickst.
if Input.is_action_just_pressed("pickup"):
if $RayCast.is_colliding():
var hit_object = $RayCast.get_collider()
if hit_object and hit_object.has_method("on_pickup"):
hit_object.on_pickup()
Wenn der Strahl auf einen Gegenstand trifft wird geprüft ob der Gegenstand eine Funktion mit dem Namen "on_pickup" hat. Wenn ja, wird diese Funktion auf dem gegenstand aufgerufen.
Dem Node den du aufheben möchtest fügst du auch ein Script hinzu und definierst die oben erwähnte Funktion "on_pickup", die aufgerufen wird wenn der Spieler das Item aufheben will. Die Funktion queue_free() sorgt dafür, dass das Objekt danach aus der Szene entfernt wird.
func on_pickup():
print("Item aufgehoben: %s" % self.name)
queue_free()
Das ist das grundlegende Prinzip, Items mit einem Raycast "aufzuheben".