How can I move multiple parts that are not touching one another together in sync?

Hello all, I’m trying to get the circle, consisting of 8 parts, above my character to spin in a 360 motion for a couple seconds, but I am having trouble figuring out how to get all 8 parts to move in a circle in sync with one another.

I figured I could pull this off by welding all of them to a central part (The transparent part in my character in the screenshot) placed in my character’s position and tween that part which could theoretically rotate the above 8 parts however this method isn’t working. I’m not sure whether it’s a viable solution or whether I am simply just not doing it right.
Here’s the code I wrote that’s handling the welding and tweening of the center part:

	Tween2.Completed:Connect(function()
				local WeldConstraint = Instance.new("ManualWeld")
				WeldConstraint.Name = "PartConstraint"
				WeldConstraint.C0 = part.CFrame:Inverse()
				WeldConstraint.C1 = Center.CFrame:Inverse()
				WeldConstraint.Part0 = Center
				WeldConstraint.Part1 = part
				WeldConstraint.Parent = part

				local Info2 = TweenInfo.new(
					20,
					Enum.EasingStyle.Elastic,
					Enum.EasingDirection.Out,
					-1,
					false,
					0

				)

				local CenterGoal = {
					CFrame = Center.CFrame * CFrame.Angles(0,math.rad(120),0) * CFrame.Angles(0,math.rad(120),0)
				}

				local Tween3 = TweenService:Create(Center,Info2,CenterGoal)
				Tween3:Play()
			end)

What is the best route I can take to make the circle spin?

1 Like

I think your code would work if you used a “WeldContstraint”. But, here’s a self-contained exampled based on your code. Paste this into a server script on a new project…

local TweenService = game:GetService("TweenService")

local center = Instance.new("Part")
center.Position = Vector3.new(0, 10, 0)
center.Anchored = true
center.Parent = game.Workspace

local parts = {}
for i=1, 8, 1 do
	-- make a halo of parts
	parts[i] = Instance.new("Part")
	parts[i].Position = (center.CFrame * CFrame.Angles(0, math.rad(360 / 8 * i), 0)):PointToWorldSpace(Vector3.new(30, 0, 0))
	parts[i].Anchored = true
	parts[i].Parent = game.Workspace
end

wait(5)


for i=1, #parts, 1 do
	local WeldConstraint = Instance.new("WeldConstraint")
	WeldConstraint.Part0 = center
	WeldConstraint.Part1 = parts[i]
	WeldConstraint.Parent = parts[i]
	parts[i].Anchored = false
end

local Info2 = TweenInfo.new(
	2,
	Enum.EasingStyle.Elastic,
	Enum.EasingDirection.Out,
	-1,
	false,
	0

)

local CenterGoal = {
	CFrame = center.CFrame * CFrame.Angles(0,math.rad(120),0)
}

local Tween3 = TweenService:Create(center,Info2,CenterGoal)
Tween3:Play()
1 Like

Oof I can’t see the clip, my browser does not support codec, try using streamable.

1 Like