Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Is there any better ways for GetchildenScript? Thanks for help!

This is my codes:

local Ghosts = workspace.Ghosts:GetChildren() -- this is a folder.

for i=1,#Ghosts - 1 do
	local Ghost
	local Distance = Player:DistanceFromCharacter(Ghosts[i].PrimaryPart.Position)
	local NextDistance = Player:DistanceFromCharacter(Ghosts[i+1].PrimaryPart.Position)
	if Distance < NextDistance then
		Ghost = Ghosts[i] 
	else
		Ghost = Ghosts[i+1]
	end
end

My code only can get two ghosts :C
Does there the better way to change this?
I want make it can get two or up.
Thanks for answering!

1 answer

✓ Accepted answer

If you want to get the closest ghost to the character, you can do something like this:

local Ghosts = workspace.Ghosts:GetChildren()

local function GetClosestGhost(Player)
	if Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") then
		
		local ClosestDist = math.huge
		local ClosestGhost
		for _,Ghost in pairs(Ghosts) do
			local GhostDistance = (Ghost.PrimaryPart.Position - Player.Character.HumanoidRootPart.Position).magnitude
			if GhostDistance < ClosestDist then
				ClosestDist = GhostDistance
				ClosestGhost = Ghost
			end
		end
		print("The closest ghost is", ClosestGhost)
		return ClosestGhost
	end
end

local Ghost = GetClosestGhost(PlayerHere)

This will iterate through every ghost while keeping track of the last closest ghost and the last closest distance. If a ghost is closer than the last closest distance, it will update the closest ghost to be the new one. Then, by the end, whichever ghost was the closest is returned.

This discussion is preserved as it was. New answers, comments, and votes are closed.