I want it so that when the player inputs ScrollUp or ScrollDown, the first object rotates or orbits around another object by 22.5 degrees or -22.5 degrees in Y-axis. How do I accomplish this?
Hello there!
I can’t test the scripts right now, so it might not work, but it’ll be something like that
We can use the math.cos
and math.sin
to make a circular path
I’ll use planet as the base object and moon as the rotating one
local Value = 0
local Distance = 10
local function Rotate(Action, Input, State)
Moon.CFrame = Planet.CFrame + (CFrame.new(math.cos(Value), math.sin(Value), 0) * Distance)
end
Here you’ll need to make a script to chance the value with the mouse wheel
Can’t help with it now sry
This or you could just weld the ‘Moon’ to a phantom part inside the ‘planet’ and rotate the phantom block.
Think it might work better
To detect the mouse wheel you can use ContextActionService or InputService
No. I tried the weld before, it doesn’t work for me at all.
The center object does rotate, but not the orbiting one.
Have you tried his code? It seems promising and accurate
I forgot to mention it in the first reply. Yeah, I will be testing his code out soon
this is a simple script just wrote to show how to rotate fully around an object
local MainPart = script.Parent
local OriginalCFrame = script.Parent.CFrame
local CurrentRotation = 0 -- current rotation
local RotationRate = 2
local Distance = 10 -- distance out from mainpart
while true do
CurrentRotation += RotationRate
-- Need to get the base cframe with the new rotation
local NewCFrame = OriginalCFrame * CFrame.Angles(0, math.rad(CurrentRotation), 0)
-- now get the direction infront of this rotated cframe to place the part that rotates around the mainpart
workspace.PartToRotate.CFrame = CFrame.new(OriginalCFrame.Position + NewCFrame.LookVector * Distance)
task.wait()
end
and here is one set with limits of degrees
local MainPart = script.Parent
local OriginalCFrame = script.Parent.CFrame
local AddRotation = true
local MinRotation = -22
local MaxRotation = 22
local CurrentRotation = MinRotation -- current rotation -- set to start rotation
local RotationRate = 1 -- added each loop
local Distance = 10 -- distance out from mainpart
while true do
-- Need to get the base cframe with the new rotation
local NewCFrame = OriginalCFrame * CFrame.Angles(0, math.rad(CurrentRotation), 0)
-- now get the direction infront of this rotated cframe to place the part that rotates around the mainpart
workspace.PartToRotate.CFrame = CFrame.new(OriginalCFrame.Position + NewCFrame.LookVector * Distance)
if AddRotation then
CurrentRotation += RotationRate
else
CurrentRotation -= RotationRate
end
if CurrentRotation >= MaxRotation then -- need to add to get to max degrees
AddRotation = false
elseif CurrentRotation <= MinRotation then -- need to add back to stay inbetween degrees
AddRotation = true
end
task.wait()
end
Commented these to help understand how it works
No luck with this. Here’s how it looks
Edit: Wait, I’m stupid. I used FindFirstChild instead of WaitForChild. Fixing it
Edit 2: Error says “invalid argument (Vector3 expected, got number)”
local value = 0
local center = game.Workspace:FindFirstChild("Center")
local orbiter = game.Workspace:FindFirstChild("Orbiter")
local Distance = 10
local function spin()
orbiter.CFrame = center.CFrame + (CFrame.new(math.cos(value),math.sin(value),0)*Distance)
end
while true do
task.wait(0.01)
spin()
end
Try this
local Center = workspace.Center
local orbiter = workspace.Orbitor
local Angle = 0
local Radius = 3 -- Distance away from Center's center
local Increment = 22.5
while task.wait(1) do
Angle += Increment
local Position = Vector3.new(math.cos(math.rad(Angle)) * math.abs(Radius), 0, math.sin(math.rad(Angle)) * math.abs(Radius))
orbiter.CFrame = Center.CFrame * CFrame.new(Position)
end
This worked, thank you. I will go with this
Actually nvm, this is better. Thank you for the help
I dont think I need to say this but I’ll say it anyway… The angle is in degrees so basically 0 to 360 degrees. Your degrees can also be negative and they can be above 360 btw so don’t worry about it