Lock On System Fling Issue

1.Hey im asking for help because i just want to achieve a simple lock on system that doesn’t make my camera glitch out

  1. My Issue is that the camera will keep glitching noticably and whenever i get close to the humanoid im locked on with it flings me as shown in the video
    2023-08-13 18-24-02

  2. I havent found any solutions

local RunService = game:GetService("RunService")
local UserInput = game:GetService("UserInputService")


local LockOn = {}

local Target
local TargetDistance
local playerBody 

LockOn.Info = {
	Range = 100,
	LockONKey = Enum.KeyCode.LeftControl,  Enum.UserInputType.MouseWheel,
	IsLocked = false,
	LeftOffset = Vector3.new(3, 3, 6),
	RightOffset = Vector3.new(5, 1, -2)
}



function LockOn.CharFound(player, Mouse)
	local playerroot = player.Character.HumanoidRootPart
	print(playerroot.Parent)
	
	for i, v in pairs(game.Workspace:GetChildren()) do
		
		if v:FindFirstChild("Humanoid") and v ~= player.Character and v:IsA("Model") then
			local EnemyRoot = v.HumanoidRootPart
			local EnemyHumanoid = v:WaitForChild("Humanoid")
			
			Target = EnemyRoot
			TargetDistance = (playerroot.Position - EnemyRoot.Position).Magnitude
			playerBody = player
			
			if(playerroot.Position - EnemyRoot.Position).Magnitude <= LockOn.Info.Range then
				LockOn.Info.IsLocked = true
			else
				LockOn.Info.IsLocked = false
			end
		end
	end
end

local Con; 
local lastdt = 0

Con = RunService.Stepped:Connect(function(dt)
	task.wait()
	
	dt = (lastdt + dt)/2
	lastdt = dt
	if LockOn.Info.IsLocked == true and Target ~= nil then
		
		local LockOn_Gui = playerBody.PlayerGui.LockOn
		LockOn_Gui.Enabled = true
		
		local EnemyName = LockOn_Gui.TextLabel
		EnemyName.Text = Target.Parent.Name
		
		
		--Camera Part
		local Distance = (playerBody.Character.HumanoidRootPart.Position - Target.Position).Magnitude
		print(Distance)
		if Distance <= LockOn.Info.Range then
			local Camera = workspace.CurrentCamera
			Camera.CameraType = Enum.CameraType.Scriptable
			UserInput.MouseIconEnabled = false
			UserInput.MouseBehavior = Enum.MouseBehavior.Default
			Camera.CFrame = CFrame.lookAt(playerBody.Character.HumanoidRootPart.Position, Target.Position ) * CFrame.new(LockOn.Info.LeftOffset)
			local Direction = (playerBody.Character.HumanoidRootPart.Position - Target.Position).Unit * Vector3.new(-1, -15, -1)
			local playerroot = playerBody.Character.HumanoidRootPart
			playerroot.CFrame = CFrame.lookAt(playerroot.Position, playerroot.Position + Direction)
		end
	end
end)


return LockOn