Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Why is FindPartOnRay not working?

Asked by
Scubadoo2 115
9 years ago

This is just a script to make curtains work. Most of it isn't really needed to know for the problem. The problem is at line 36.


----------Variables------------------ top = script.Parent opened = top:WaitForChild("Opened") closed = top:WaitForChild("Closed") event = top:WaitForChild("String") action = false debounce = false listenTo = opened.Changed:connect(function() end) listenTo:disconnect() switch = top:WaitForChild("Switch") curtainScript = switch:WaitForChild("Action") currentColor = switch.BrickColor clickedColor = BrickColor.new("Really red") ----------Variables for curtain Setup------------------------ parts = top:WaitForChild("CurtainParts") railing = top:WaitForChild("Railing") rWidth = railing.Size.X test1 = railing.Position - Vector3.new(0,2,0) print(test1) test2 = railing.Position - Vector3.new(0,4,0) print(test2) ray = Ray.new(railing.Position, Vector3.new(0,-2,0)).unit place = game.Workspace:FindPartOnRay(ray, nil) print(place)

The problem is that it always sends back nil. The ray is supposed to look strait down from railing, but it always returns nil. I surrounded railing with bricks to see if it was going in the wrong direction, but it was still nil. Even substituting the railing position for test1 (which is just the railing Position lowered by 2) doesn't change the result. What am I doing wrong?

1 answer

Log in to vote
1
Answered by
BlueTaslem 18071 Moderation Voter Administrator Community Moderator Super Administrator
9 years ago

ROBLOX's definition of "ray" is really more like a segment.

FindPartOnRay will only look as far as the length of the ray.

That means you probably don't want to use unit with it, and the second parameter should be multiplied by something big; at the same time, ROBLOX limits ray length to 1000 for raycasting.

Usually the construction looks like this as a result of all of the above:

local ray = Ray.new(start, direction.unit * 1000)
Ad

Answer this question