# Making a player orbit a part

I’m trying to make an effect for a game where partially through an event, the player starts orbiting a part, kind of like how GLaDOS drags the player across the room in Portal: Prelude, yet I’m not sure of the best way to do it.

1 Like

Can you provide more details?
What do you mean by orbiting?

By orbiting I mean; the player would start floating / moving around the part.

Hello Jayden heres a quick orbit script i made some time ago hopefully this helps!

``````local Part = workspace.Part -- The part
local Player = game.Players.LocalPlayer -- The player that orbits the part

if not Player and Part then return end

local Character = Player.Character
local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
local Distance = 10 -- Edit the distance that the player orbits around the Part

if Character and Part then
local SineX, SineZ = 0, math.pi / 2
game:GetService('RunService').Stepped:Connect(function()
SineX, SineZ = SineX + 0.05, SineZ + 0.05
local SinX, SinZ = math.sin(SineX), math.sin(SineZ)
if HumanoidRootPart and Character then
HumanoidRootPart.Velocity = Vector3.new(0, 0, 0)
HumanoidRootPart.CFrame = CFrame.new(SinX * Distance, 0, SinZ * Distance) *
(HumanoidRootPart.CFrame - HumanoidRootPart.CFrame.p) +
Part.CFrame.p
end
end)
end
``````
1 Like

It works rather well, but a quick question, how would I make the player take damage when they collide with a part while spinning…?

i’m guessing something like this

``````local Part = workspace.Part -- The part
local Player = game.Players.LocalPlayer -- The player that orbits the part

if not Player and Part then return end

local Character = Player.Character
local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
local Distance = 10 -- Edit the distance that the player orbits around the Part

if Character and Part then
local SineX, SineZ = 0, math.pi / 2
game:GetService('RunService').Stepped:Connect(function()

spawn(function()

for _, Part1 in next, Parts do
if Part1 ~= Part and Part1.Parent ~= Character and Part1.Parent.Parent ~= Character then
print(Part1.Name)
Character.Humanoid.Health = Character.Humanoid.Health - 0.3 -- Because of the Stepped loop keep the health taken away low
end
end

end)

SineX, SineZ = SineX + 0.05, SineZ + 0.05
local SinX, SinZ = math.sin(SineX), math.sin(SineZ)
if HumanoidRootPart and Character then
HumanoidRootPart.Velocity = Vector3.new(0, 0, 0)
HumanoidRootPart.CFrame = CFrame.new(SinX * Distance, 0, SinZ * Distance) *
(HumanoidRootPart.CFrame - HumanoidRootPart.CFrame.p) +
Part.CFrame.p
end
end)
end
``````
2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.