My FPV drone system will be used in a pvp game to hit players and explode. But the drone is flying too fast to hit anything than terrain. How would I go about making it slower?
Watch 2025-07-06 19-20-41 | Streamable (Take a look at the end of the video - that’s when it’s at its worst.)
I’ve tried messing around with the gainforce and loseforce, but that doesn’t help.
Client controller script (network ownership given to player on server)
-- // Services
local UIS = game:GetService("UserInputService")
local RS = game:GetService("RunService")
-- // Idents
local plr = game.Players.LocalPlayer
local cam = workspace.CurrentCamera
-- // Code
local controlFPVdrone = {}
function controlFPVdrone.initializeControls(droneModel : Model)
local cache = {}
-- Players' Character
local hum : Humanoid = plr.Character.Humanoid
hum.WalkSpeed = 0
-- Identifying
local droneModelMain : Part = droneModel:WaitForChild("Main")
local cameraPoint : Part = droneModel.CamPart
local droneMass = droneModelMain:GetMass()
local hoverForce = (droneMass * workspace.Gravity) -- hover
local gainForce = (hoverForce * 1.15) -- go up
local loseForce = (hoverForce * 0.85) -- go down
-- Instancing
local vectorForce = Instance.new("VectorForce", droneModelMain)
local alignOrientationForce = Instance.new("AlignOrientation", droneModelMain)
local forceAttachment = Instance.new("Attachment", droneModelMain)
-- Main Logic
vectorForce.ApplyAtCenterOfMass = true
vectorForce.RelativeTo = Enum.ActuatorRelativeTo.Attachment0
vectorForce.Attachment0 = forceAttachment
vectorForce.Force = forceAttachment.WorldCFrame.UpVector * hoverForce
alignOrientationForce.Attachment0 = forceAttachment
alignOrientationForce.RigidityEnabled = false
alignOrientationForce.Responsiveness = 50
alignOrientationForce.MaxTorque = math.huge
alignOrientationForce.Mode = Enum.OrientationAlignmentMode.OneAttachment
alignOrientationForce.CFrame = CFrame.new() * CFrame.Angles(math.rad(droneModelMain.Orientation.X),math.rad(droneModelMain.Orientation.Y),math.rad(droneModelMain.Orientation.Z))
-- Placing Camera
plr.ReplicationFocus = droneModelMain
cam.CameraType = Enum.CameraType.Scriptable
cam.CFrame = cameraPoint.CFrame
UIS.MouseBehavior = Enum.MouseBehavior.LockCenter
-- Controlling
local inpBeganCon = UIS.InputBegan:Connect(function(input, registered)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
vectorForce.Force = forceAttachment.WorldCFrame.UpVector * gainForce
end
if input.UserInputType == Enum.UserInputType.MouseButton2 then
vectorForce.Force = forceAttachment.WorldCFrame.UpVector * loseForce
end
end)
local inpEndCon = UIS.InputEnded:Connect(function(input, registered)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.MouseButton2 then
vectorForce.Force = forceAttachment.WorldCFrame.UpVector * hoverForce
end
end)
local rSteppedCon = RS.RenderStepped:Connect(function(dt)
-- camera updating
cam.CFrame = cameraPoint.CFrame
-- tilting
local mouseDelta = UIS:GetMouseDelta() / 10
local mdY = -mouseDelta.Y
local mdX = -mouseDelta.X
-- rotating
local yRot = 0
if UIS:IsKeyDown(Enum.KeyCode.A) then
yRot += 0.01
elseif UIS:IsKeyDown(Enum.KeyCode.D) then
yRot -= 0.01
end
-- final align orientation positioning
alignOrientationForce.CFrame = alignOrientationForce.CFrame * CFrame.Angles(math.rad(mdX),yRot,math.rad(mdY))
end)
-- Caching
table.insert(cache, inpBeganCon)
table.insert(cache, inpEndCon)
return cache
end
return controlFPVdrone
Any help is highly appreciated. Thank you.