Help with touched event

Why cant i detect if cloned orb was touched by player or not (while waiting)

local function handleOrbTouched(orb)
	orb.Touched:Connect(function(hit)
		local character = hit.Parent
		local player = Players:GetPlayerFromCharacter(character)
		if player then
			print(player.Name .. " touched an orb! Team: " .. (player.Team and player.Team.Name or "Unknown"))
			if player.Team and player.Team.Name == "Players" then
				orb:Destroy()
			end
		end
	end)
end

local function startRound()
	assignTeams()
	teleportPlayers(mapSpawn)
	print("Round started!")

	local orbCount = 50

	for i = 1, orbCount do
		local newOrb = Orb:Clone()
		newOrb.Parent = OrbsFolder

		local size = Spawner.Size
		local randomX = math.random(-size.X / 2, size.X / 2)
		local randomZ = math.random(-size.Z / 2, size.Z / 2)

		newOrb.Position = Spawner.Position + Vector3.new(randomX, Spawner.Position.Y, randomZ)
		handleOrbTouched(newOrb)
	end

	wait(roundTime)

	for i, v in pairs(OrbsFolder:GetChildren()) do
		if v.Name == "Orb" then
			v:Destroy()
		end
	end

	print("Round ended! Teleporting back to lobby.")
	teleportPlayers(lobbySpawn, "Lobby")
end

Do the print statements print something? And is your orb a model or a Part/BasePart?

does not print anything and its a part

Are you calling the start round function?

How about this …

local Players = game:GetService("Players")

local function handleOrbTouched(orb)
	orb.Touched:Connect(function(hit)
		local character = hit.Parent
		local player = Players:GetPlayerFromCharacter(character)
		if player then
			print(player.Name .. " touched an orb! Team: " .. (player.Team and player.Team.Name or "Unknown"))
			if player.Team and player.Team.Name == "Players" then
				orb:Destroy()
			end
		end
	end)
end

local function startRound()
	assignTeams()
	teleportPlayers(mapSpawn)
	print("Round started!")

	local orbCount = 50

	for i = 1, orbCount do
		local newOrb = Orb:Clone()
		newOrb.Parent = OrbsFolder

		local size = Spawner.Size
		local randomX = math.random(-size.X / 2, size.X / 2)
		local randomZ = math.random(-size.Z / 2, size.Z / 2)

		newOrb.Position = Spawner.Position + Vector3.new(randomX, 5, randomZ)
		newOrb.Anchored = false
		newOrb.CanTouch = true
		newOrb.Massless = true

		handleOrbTouched(newOrb)
	end

	task.wait(roundTime)

	for _, v in pairs(OrbsFolder:GetChildren()) do
		if v:IsA("BasePart") and v.Name == "Orb" then
			v:Destroy()
		end
	end

	print("Round ended! Teleporting back to lobby.")
	teleportPlayers(lobbySpawn, "Lobby")
end

notes:
Ensure the Orb is unanchored and has CanTouch = true.
Add Massless = true to avoid physics issues.
Ensure Players is defined at the start.