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

how do I make a ray from raycasting go faster and not lag?

Asked by
zValerian 108
5 years ago
Edited 5 years ago

I am working on a spell-type game where if you click, it fires an event to the server with your name and the position of where you clicked. (position of mouse.hit is a). Then, the server script that gets the remote makes a ray that zigzags to where you clicked. My only issue is that it is going too slow. Is there anyway to make the ray go faster? Here is my script:

game.ReplicatedStorage.flipp.OnServerEvent:Connect(function(player, name, a)

local animation = game.Players:FindFirstChild(name).Character.Humanoid:LoadAnimation(game.Workspace:FindFirstChild(name).Wand.Animation)
        animation:Play()
local characterr = game.Workspace:FindFirstChild(name)
lol = Instance.new("Sound")
lol.Parent =  game.Workspace:FindFirstChild(name).Wand.Tip
lol.SoundId = "rbxassetid://216866651"
lol.MaxDistance = 100
lol.EmitterSize = 100
lol:Play()

wait(.3)

--local ray = Ray.new(game.Workspace:FindFirstChild(name).Wand.Tip.Position(a - game.Workspace:FindFirstChild(name).Wand.Tip.Position).Unit * 750)

local character = game.Workspace:FindFirstChild(name)
local origin = character.Wand.Tip.Position


local ray = Ray.new(origin, (a - origin).Unit * 750)
local studsUporDown = 0.25
local timeTillNext = 0.025
local segmentLength = 2
local damageAmount = 10
local part = game.ReplicatedStorage.flip:Clone()
part.Parent = workspace
studsUporDown = studsUporDown * 100

local function entropy()
    local x = math.random(-studsUporDown,studsUporDown) / 100
    local y = math.random(-studsUporDown,studsUporDown) / 100
    local z = math.random(-studsUporDown,studsUporDown) / 100
  return Vector3.new(x, y, z)
end
spawn(function()
    for i = 0, 750, segmentLength do
        local Next = ray.Origin + i * ray.Direction.Unit + entropy()
    local damageRay = Ray.new(part.Position, (Next - part.Position).Unit * segmentLength)
part.CFrame = CFrame.new(Next)
    local hit, End = workspace:FindPartOnRay(damageRay, character, false, true)
if hit and hit ~= part then
        print(hit)
            local burn = game.ReplicatedStorage.fliph

part:Destroy()
        part.CFrame = CFrame.new(End)
        local hum = hit.Parent:FindFirstChild("Humanoid") or hit.Parent.Parent:FindFirstChild("Humanoid")
        if hum then
            hum:TakeDamage(damageAmount)
            spawn(function()


            end)
    else
    wait(.01)
    local burnHit = burn:Clone()
    burnHit.CFrame = CFrame.new(End)
    burnHit.Parent = workspace
 local hit, pos, normal = game.Workspace:FindPartOnRay(ray)
burnHit.CFrame = CFrame.new(pos, pos + normal) * CFrame.Angles(-math.pi/2,0,0)



        end
break
    end
        wait(timeTillNext)
    end
end)
end)

ANYTHING HELPS.

ex of how slow it is: https://gyazo.com/f787086bfab527fb29a78bb9aee3c5d9

0
The timetillnext variable I added when I helped you with that is meant to adjust the speed. that's the amount of time it will take to travel to the next point, so if you decrease it the ray should go faster. You can also just increase the segment length. ThatPreston 354 — 5y
0
You should instead ray cast on the client. User#19524 175 — 5y
0
I changed it to 0.0025 but it still lags, let me make a gif, check the post in a sec zValerian 108 — 5y
0
The minimum wait() time is 1/30. If you want faster than that (1/60, max possible), use game:GetService(“RunService”).Stepped:Wait() RubenKan 3615 — 5y

Answer this question