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

Why is RayCasting not detecting humanoid most of the time?

I have been trying to make a gun using raycasting, but most of the time when i click on a humanoid the ray goes past it and hits the baseplate (Evident using print functions to find out where the ray is hitting) Please help!

local Player = game.Players.LocalPlayer
local mouse = Player:GetMouse()
local mousepostion = mouse.hit.p
local tip = script.Parent:WaitForChild("Tip")
local waits = false
local event = script.Parent.GunInfo:WaitForChild("FireEvent")
local damage = 35
local range = 350
local ignore = {Player.Character, script.Parent}

local function click()
	if waits then return end
	waits = true
	local orgin = tip.Position
	local direction = (mousepostion - orgin).Unit * range
	local rayresult = Ray.new(orgin, direction)

	if rayresult then
		local part, position = workspace:FindPartOnRayWithIgnoreList(rayresult, ignore)
		local humanoid = part.Parent:FindFirstChild("Humanoid")
		if not humanoid then
			humanoid = part.Parent.Parent:FindFirstChild("Humanoid")
		end
		if humanoid then
			event:FireServer(humanoid, damage)
		else
		end
	end
	wait(.5)
	waits = false
end

script.Parent.Activated:Connect(click)

1 answer

✓ Accepted answer

mouseposition should be definied right before using it (probably the issue) server should decide damage instead of the client finding the humanoid should (probably) loop through the ancestors looking for a humanoid instead of just trying part.Parent and part.Parent.Parent

local par = part.Parent
local humanoid
local ran = 0
repeat
	humanoid = par:FindFirstChildOfClass("Humanoid")
	if humanoid then
		break
	end
	ran += 1
	par = part.Parent
until not par or ran >= 300

other than that the current code should work

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