I create a ball that is supposed to rotate the player at 90 deg per second and it works fine when the player spawns but when the player starts to move the ball starts getting farther away from the player.
Local
local RS = game:GetService("RunService")
local RepStore = game:GetService("ReplicatedStorage")
local rotatePart = RepStore:WaitForChild("RotatePart_E")
function rotatePoint(point, center, angle)
angle = angle * (math.pi / 180) -- Convert to radians
local rotX = math.cos(angle) * (point.x - center.x) - math.sin(angle) * (point.z - center.z) + center.x
local rotZ = math.sin(angle) * (point.x - center.x) + math.cos(angle) * (point.z - center.z) + center.z
return {rotX, rotZ}
end
rotatePart.OnClientEvent:Connect(function(center, ball)
RS.RenderStepped:Connect(function(delta)
local rotateBy = 90 * delta
local ballPosition = {x = ball.Position.X, z = ball.Position.Z}
local centerPosition = {x = center.Position.X, z = center.Position.Z}
-- Update position
local rotatedPosition = rotatePoint(
ballPosition,
centerPosition,
rotateBy
)
ball.Position = Vector3.new(
rotatedPosition[1],
center.Position.Y,
rotatedPosition[2]
)
end)
end)
Server
local RepStor = game:GetService("ReplicatedStorage")
local rotatePart = Instance.new("RemoteEvent")
rotatePart.Name = "RotatePart_E"
rotatePart.Parent = RepStor
game.Players.PlayerAdded:Connect(function(plr)
-- local center = workspace:WaitForChild("CenterPart")
local char = workspace:WaitForChild(plr.Name)
local center = char:FindFirstChild("HumanoidRootPart")
local ball = Instance.new("Part")
ball.Parent = center
ball.Shape = "Ball"
ball.Anchored = true
ball.CanCollide = false
ball.BrickColor = BrickColor.new("Really red")
ball.Size = Vector3.new(1, 1, 1)
ball.Position = Vector3.new(
center.Position.X + 3,
center.Position.Y,
center.Position.Z + 3
)
rotatePart:FireClient(plr, center, ball)
end)
