Alright, this is a really easy fix I will show you. So I also have a custom character and had the same problem. To fix it press play and make sure you are using your custom character. Once you are in the world go on onto the explorer and look for your player. Once you do find your player click on the dropdown of the player and select humanoid as shown in the picture here.
Once you select the humanoid go onto the properties and make sure you are on the camera offset as shown in this second picture.
Once you are on the camera offset make sure you clicked on the dropdown. Once you do you will see X, Y, and Z. What you want to focus mainly on is the Y axis.
As you can see in the picture above I increased the Y level by 1 and it still wasn’t enough so I messed around a bit and the perfect number was 2 for me.
Alright, the picture above shows that I changed the camera offset of the Y axis to level “2” and you can also see that the camera is looking straight at the head which means this Y level is perfect for me.
You can also further verify that the camera is looking directly at the face by zooming all the way in. If it zooms into your face or head then you have it at the perfect Y level
I hope all of this helps you with whatever you are making. (:
Also, I don’t know if it is only for me but every time I make the camera offset edit from the humanoid (not while testing the game) it just reverts back to default (which is 0,0,0) so to fix this I just made a script containing all the settings for my character and that includes the camera offset edit.
you almost had it here just change the subject to the Head or a block you want the camera positioned at that is attached to the character
you can test this with local script default roblox avatar
local Camera = workspace.CurrentCamera
local Player = game.Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
Camera.CameraSubject = Character:WaitForChild('Head')