So I was following the Wiki (https://developer.roblox.com/en-us/articles/CFrame-Math-Operations) and when I got to the "Rotation" Section and they started talking about CFrame:Inverse(), that's when I lost it. I'm having an extremely difficult time understanding why I need to use CFrame:Inverse() in this case scenario.
Here's the finished product code:
local door = game.Workspace.Door local hinge = game.Workspace.Hinge local offset = hinge.CFrame:inverse() * door.CFrame; -- offset before rotation game:GetService("RunService").Heartbeat:connect(function(dt) hinge.CFrame = hinge.CFrame * CFrame.Angles(0, math.rad(1)*dt*60, 0) -- rotate the hinge door.CFrame = hinge.CFrame * offset -- apply offset to rotated hinge end)
Everything works perfectly. However, when I get rid of the :inverse()
method on the hinge.CFrame:inverse()
(so it's just hinge.CFrame
), the door orbits around the Hinge. I'm having trouble figuring out why that is the case.
Code for when the Door orbits the Hinge:
local door = workspace.Door.Block2 local hinge = workspace.Door.Hinge local offset = door.CFrame * hinge.CFrame; game:GetService("RunService").Heartbeat:connect(function(dt) hinge.CFrame = hinge.CFrame * CFrame.Angles(0, math.rad(1)*dt*60, 0) --Turn this by 1 -- at a consistent rate -- at speed 60 door.CFrame = hinge.CFrame * offset end)
See the Object Orbiting the Hinge: https://gyazo.com/826af989bcfe5577ea68c8f2ba05ed36