class_name Trigger extends Area3D signal triggerBodyEntered @export var groups: Array[String] = ["Player"] @export var one_shot := true func _ready() -> void: body_entered.connect(_on_body_entered) # trigger upon first body matching the specified group enters # after trigger has fired, disable monitoring for the area func _on_body_entered(body: Node3D): for group in groups: if body.is_in_group(group): print("Body entered") triggerBodyEntered.emit(self, body) if one_shot: set_deferred("monitoring", false)