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

How would I check if there is a part at a certain position?

Assume that the player just mined (destroyed) a block. I would want to spawn a block right under the block they just mined but only if there is no block beneath it.What would be the best method to check if their is a part at a certain position such as the part the player just mined subtracted by a vector?

1 answer

✓ Accepted answer

You can use raycasting and check if a part collides with it by using workspace:FindPartOnRay(ray), which returns the first part that collides with that ray.

To create a ray, use Ray.new(origin vector3, direction vector3).

If you want to filter parts on the raycast, you can use workspace:FindPartOnRayWithWhitelist(ray,array) or workspace:FindPartOnRayWithIgnoreList(ray,array).

This is an example of raycasting, put it on a LocalScript. The code raychecks every second if there is a part beneath the player and if it does, it changes its color to red for one second:

local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
player.CharacterAdded:Connect(function() char = player.Character end)

while true do
	if char:findFirstChild("HumanoidRootPart") then
		local origin = char.HumanoidRootPart.Position
		local direction = char.HumanoidRootPart.CFrame.UpVector*-1
		local ray = Ray.new(origin,direction*10)
		local ignoreList = {char} --ray wont collide with your own character anymore
		local part = workspace:FindPartOnRayWithIgnoreList(ray,ignoreList)
		if part then
			local savedcolor = part.Color
			part.BrickColor = BrickColor.Red()
			wait(1)
			part.Color = savedcolor
		end
	end
	wait(1)
end

You can also use region3 to check with workspace:FindPartsInRegion3(). This returns all parts on a region3, and you can also filter it with a whitelist or ignorelist variant of the function.

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