local function checkCollision(part, grabbed)
local directions = {
Vector3.new(1, 0, 0), -- Right
Vector3.new(-1, 0, 0), -- Left
Vector3.new(0, 1, 0), -- Up
Vector3.new(0, -1, 0), -- Down
Vector3.new(0, 0, 1), -- Forward
Vector3.new(0, 0, -1) -- Backward
}
local rayLength = part.Size.Magnitude
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {workspace.Terrain.Blood, workspace.Characters, workspace.Cubes}
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
for _, dir in pairs(directions) do
local rayOrigin = part.Position + Vector3.new(0,1,0)
if grabbed then
rayOrigin = part.Position
end
local rayDirection = dir
local raycastResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams)
if raycastResult and raycastResult.Instance then
local hit = raycastResult.Instance
if hit:IsA("BasePart") and hit.CanCollide then
return true, hit, raycastResult.Normal, raycastResult
end
end
end
return false
end
part.Touched:Connect(function(child)
local hasCollision, hit, normal, result = checkCollision(part, grabbed)
if hasCollision then
-- blood placement system
end
end)
checks lead to fps loss, how i can fix it?