Help With First Person Script

Alright so I want the player to be able to look down and see their own body, but the problem is when you make the torso visible it takes up a large portion of the screen. To fix this I set the camera offset a little bit forward so the torso is not fully in view, but when I do this, the player can walk up against a wall and the camera will clip through it and they can see what is beyond the wall.

Script:

local player = game.Players.LocalPlayer
local char = player.Character

char.Humanoid.CameraOffset = Vector3.new(0, 0, -1)

for i, v in pairs(char:GetChildren()) do
	if v:IsA("BasePart") and v.Name ~= "Head" then
		
		v:GetPropertyChangedSignal("LocalTransparencyModifier"):Connect(function()
			v.LocalTransparencyModifier = v.Transparency
		end)
		
		v.LocalTransparencyModifier = v.Transparency
		
	end
end

Any suggestions?