I'm doing something where I'd like the player to face the direction of the camera at all times. In this case, I cannot use any of the existing CameraTypes, as I am doing it in first person and the way that I've scripted the camera now prevents the player from turning when the camera is moved, like it normally does.
To fix this, I thought I would do
Although I don't know of any way to get the Camera's rotation, as there is no orientation property; only CFrame. So, my question is how do I get the rotation value from a CFrame?
In order to get the rotational part of a
CFrame, all you have to do is subtract the position from the
CFrame. Then, you can apply the rotation to the existing
CFrame of the humanoid root part using the
local camera = workspace.CurrentCamera --Rotation and position of the coordinate frame local rotation = camera.CFrame - camera.CFrame.p local position = CFrame.new(humanoidRootPart.Position) --Apply the rotation to the position coordinate frame local result = humanoidRootPart.CFrame * rotation character:SetPrimaryPartCFrame(result)
It is important to note that when doing
camera.CFrame - camera.CFrame.p, what we are really doing is translating or moving around the CFrame to the origin. For example,
cf = cf + Vector3.new(0 , 1 , 0) will move
cf up by one stud. When a
CFrame is at the origin, it's position is essentially zero on all axes which means that applying this
CFrame to another operand will leave its position untouched.