i'm trying to simulate bullets with multiple raycasts each at the end of the other, but the raycasts just completely separate from each other and fly off to the left?

i'm pretty sure it has something to do with the code that finds the ray origin but i'm not completely certain

what it should be doing: https://imgur.com/nlQihRX

what it's doing: https://imgur.com/QAumKQO

here's the entire (serverside) section of code related to the raycasts, with the exception of cameraDir which is just the client's camera cframe from a local script.

local function fire(cameraDir)
	local castDir = cameraDir.LookVector
	local bulletActive = true
	local currentBulletSpeed = bulletSpeed/bulletPathResolution
	local rayOrigin = Vector3.new(tool.MeshPart.Position.X, tool.MeshPart.Position.Y, tool.MeshPart.Position.Z)
	local dropSpeed = 0
	while bulletActive == true do
		local rayParams = RaycastParams.new()
		rayParams.FilterDescendantsInstances = {script.parent}
		rayParams.FilterType = Enum.RaycastFilterType.Blacklist
		local rayParam2 = castDir*(math.sqrt((currentBulletSpeed^2)+(dropSpeed^2)))
		local rayResult = workspace:Raycast(rayOrigin, rayParam2, rayParams)
		print("cast number "..(dropSpeed/(35.025/bulletPathResolution)+1).." going "..currentBulletSpeed.." st/s and falling at "..dropSpeed.." st/s from "..rayOrigin.X..", "..rayOrigin.Y..", "..rayOrigin.Z)
		local rayPoint = Instance.new("Part", game.Workspace)
		rayPoint.CanCollide = false
		rayPoint.Name = "raypoint"..(dropSpeed/(35.025/bulletPathResolution)+1)
		rayPoint.Anchored = true
		rayPoint.Size = Vector3.new(1, 1, (math.sqrt((currentBulletSpeed)^2+(dropSpeed)^2)))
		rayPoint.CFrame = cameraDir.Rotation
		rayPoint.Position = rayOrigin+castDir*((math.sqrt((currentBulletSpeed^2)+(dropSpeed^2)))/2)
		dropSpeed = dropSpeed+(35.025/bulletPathResolution)
		currentBulletSpeed = currentBulletSpeed/(1+(.001/bulletPathResolution))
		rayOrigin = rayOrigin+rayParam2
		castDir = Vector3.new(castDir.X-90+math.atan((currentBulletSpeed)/(dropSpeed)), castDir.Y, castDir.Z)
		wait(1/bulletPathResolution)
	end
	recoilAnim:Play()
end

1 comment

0

this is being tested in roblox studio's "play" mode btw