Help with camera collision

I am trying to create camera collision(popper cam) with this camera script but, it just starts going in and out of the part. I don’t know what to do. This Is what I tried. Any help is appreciated

-------------
--- INDEX ---
-------------

--Services
local userInputService = game:GetService("UserInputService")
local runService = game:GetService("RunService")

--Player & Character
local localPlayer = game:GetService("Players").LocalPlayer

--Other
local Camera = game:GetService("Workspace").CurrentCamera

--------------
--- VALUES ---
--------------

local xAngle = 0
local yAngle = 0
local cameraPos = Vector3.new(3.5,0,7.5)

----------------------
--- INITIALIZATION ---
----------------------

wait(1)
Camera.CameraType = Enum.CameraType.Scriptable
userInputService.MouseBehavior = Enum.MouseBehavior.LockCenter

-----------------
--- FUNCTIONS ---
-----------------

userInputService.InputChanged:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseMovement then
		xAngle = xAngle-input.Delta.x*0.4
		--Clamp the vertical axis so it doesn't go upside down or glitch.
		yAngle = math.clamp(yAngle-input.Delta.y*0.4,-80,80)
	end
end)

runService.RenderStepped:Connect(function()
	local Character = localPlayer.Character
	local rootPart = Character:FindFirstChild("HumanoidRootPart")
	if Character and rootPart then
		--Set rotated start cframe inside head
		local startCFrame = CFrame.new((rootPart.CFrame.p + Vector3.new(0,2,0)))*CFrame.Angles(0, math.rad(xAngle), 0)*CFrame.Angles(math.rad(yAngle), 0, 0)
		
		--Set camera focus and cframe
		local cameraCFrame = startCFrame + startCFrame:vectorToWorldSpace(Vector3.new(cameraPos.X,cameraPos.Y,cameraPos.Z))
		local cameraFocus = startCFrame + startCFrame:vectorToWorldSpace(Vector3.new(cameraPos.X,cameraPos.Y,-50000))
		
		local CameraRay = Ray.new(Camera.CFrame.p,-Camera.CFrame.LookVector * 5 )
			local Ignore = {Character}

			local HitPart, HitPosition = game.Workspace:FindPartOnRayWithIgnoreList(CameraRay, Ignore)

			
			
			
			
			
			if HitPart then -- Camera Colision(popper cam)
				print("part hit")
				local camcframe = CFrame.new(cameraCFrame.p - HitPosition,cameraFocus.p)
				Camera.CFrame = (cameraCFrame - (Camera.CFrame.Position - HitPosition))  
-- I also tried changing Camera.CFrame.Position to cameraPos and that didnt work
			end
			if not HitPart then
				print("no part hit")
				Camera.CFrame = CFrame.new(cameraCFrame.p,cameraFocus.p)
			end
	end
end)