First Person Camera Help!

I am trying to make a FirstPersonBody Script, however, i can’t figure out a way to offset the camera properly to make it work, i will try explain it better:

this is how this is going so far:


as you can see the body takes half the screen when you look down.

a bad solution would be to offset the camera one stud up (0,1,0)


although it works you can clearly see that it makes you look taller compared to other players.

if i try to make it go one stud forward (0,0,-1) this happens


the camera goes inside the player.

Humanoid has a property that allows you to offset the camera, but it only works great when its on x or y axes, z axes makes it look choppy, which of course is not what i want.

the best solution i got so far was to offset the HumanoidRootPart Motor6D:


it is exactly what i am looking for, however since the script runs in a loop(RunService:BindToRenderStep()), checking for the Motor6D all the time don’t look like a good idea to me.

it is possible to get the same result using only the camera? (no HumanoidRootPart, no Humanoid.CameraOffset, only CurrentCamera.)

I tried using the humanoid offset value, and I didn’t receive similar stutters even at lower fps.

Could there be anything specific you’re doing to the camera’s CFrame that could be causing that problem with humanoid.Offset?

I even tried using the offset value in my own custom camera controller, and I received the same results as when using humanoid.Offset.

I am rotating the body via script, maybe i should update it after humanoid priority and not camera priority

1 Like


i managed to break the camera even more, AND STILL HAVE NOT FOUND A WAY TO DO THE OFFSET, PLS HELP!

1 Like

Idea: Move the camera down (0,1,0) first, apply the rotation, move the camera up (0,1,0)
In my opinion this will work because the camera is not rotating in place, but instead have a radius of 1 if that make any sense, so it will go forward when looking down. (but won’t be up 1 stud when not looking down)

not to add insult to injury but how did you achieve the stretch effect? I kinda want it lol

Update:Guys, i managed to get the offset but now my old enemy showed up again, COLLISIONS!!!


Does anyone knows how to fix it without that “weld a part to the head” method?

also this is the code i am using to do the offset:

Cam.CFrame = CFrame.fromMatrix(PlayerChar:GetPivot().Position + PlayerChar:GetPivot().LookVector.Unit,Cam.CFrame.XVector,Cam.CFrame.YVector,Cam.CFrame.ZVector)

CFrame.FromMatrix(Position, XVector, YVector, ZVector)

then just replace vector with any other value in vector3, in that video i put this:

CFrame.FromMatrix(Position, XVector, Vector3.new(0,0,0), ZVector)

It looks like you are moving the camera in front of the player (regardless wether the player is looking down)

perhaps you can do a raycast from the camera forward 1 stud
then you can do if there is raycast distance then PlayerChar:GetPivot().LookVector.Unit * distance (else keep everything as is)

I had done that but it causes clipping issues still.

I was trying to understand this post:

I read 3 times already but still have no idea how to implement it