Hello!
I have an example place included of kicking a ball that curves left, right, back or top using the magnus formula.
However, I cannot get the magnus force of the ball, and the spin of the ball to go in the same direction.
For example, if I curve the ball to the left, it curves to the left but the ball has a back spin and not a left spin. I assume the solution is to somehow rotate the angular velocity vector that I set, but I’ve been stuck for days, tried everything and cannot figure out how to get it working.
Any help would be greatly appreciated thank you!
Curve Ball Devforum.rbxl (39.7 KB)
local ballObject = script.Parent:WaitForChild("Handle")
local tool = script.Parent
local player = game:GetService("Players").LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local HRP = character:WaitForChild("HumanoidRootPart")
local mouse = player:GetMouse()
--Left means the ball spins to the left but it doesn't actually curve to the left
local curveAngles = {
["Right"] = CFrame.Angles(math.rad(90), math.rad(0), 0), --Spins right, but does a backspin curve
["Left"] = CFrame.Angles(math.rad(-90), math.rad(0), 0), --Spins left, but does a topspin curve
["Top"] = CFrame.Angles(math.rad(0), math.rad(90), 0), --Spins top, but does a left curve
["Back"] = CFrame.Angles(math.rad(0), math.rad(-90), 0), --Spins back, but does a right curve
}
local ball
game["Run Service"].Heartbeat:Connect(function(dt)
if ball ~= nil then
if ball.AssemblyLinearVelocity.Magnitude > 0 then
local v = ball.AssemblyLinearVelocity
local vs = ball.AssemblyAngularVelocity
local s = 1
local magnus = s * (vs * ball.AssemblyMass)
ball.MagnusForce.Force = magnus
end
end
end)
mouse.Button1Down:Connect(function()
--Sets ball kick direction
local upAngle = CFrame.Angles(math.rad(40), 0, 0)
local direction = (HRP.CFrame * upAngle).LookVector
--Sets ball power
local power = 120 * direction
--Clone ball and set position
local ballPosition = HRP.CFrame * Vector3.new(0, 2, -2)
ball = ballObject:Clone()
ball.CFrame = CFrame.new(ballPosition)
ball.CanCollide = true
ball.Parent = game.Workspace
--Set velocity
ball.AssemblyLinearVelocity = power
--Set curve direction and set angular velocity
local curveDirectionName = "Top"
ball.AssemblyAngularVelocity = (HRP.CFrame * curveAngles[curveDirectionName]).LookVector * 50
end)