Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Help getting rotation?

The following post includes a set of pictures and explanations of what I want to do.

Picture 1 (Click) This picture shows a brick tilted by 30 degrees on it's Z axis. If I do print(workspace.Part.Rotation.Z), it gives me 150, which is perfectly fine.

Picture 2 (Click) This picture shows the brick after rotating it by 15 degrees on its Y axis and its X axis. Now if I go ahead and do print(workspace.Part.Rotation.Z), it gives me 153.967, which is not what I want.

My question is, how would I go about getting the same Z rotation of a brick even when it's X and Y is rotated at the same time? Thank's for the help.

1 answer

✓ Accepted answer

You are asking for the roll around the part's Z-axis.

A way to compute that is this:

local _, _, z = CFrame.new(part.Position, part.Position+part.CFrame.lookVector):toObjectSpace( part.CFrame):toEulerAnglesXYZ()

There are two parts to this:

  1. We use the observation that if we get a "normal" X and Y rotation, we can straight out read the Z rotation (using :toEulerAnglesXYZ() which is the same as using the .Rotation as the part)

  2. We can "undo" the X and Y spin because it's easy to make a CFrame with 0 roll, but the same X and Y rotation.

local zeroRoll = CFrame.new(part.Position, part.Position + part.CFrame.lookVector)
local justRoll = zeroRoll:toObjectSpace( part.CFrame )
local zero1, zero2, roll = justRoll:toEulerAnglesXYZ()
-- roll is in radians
local rollDegrees = math.deg(roll)

This can be condensed into the first snippet in this answer.

This discussion is preserved as it was. New answers, comments, and votes are closed.