How can I resolve the issue with Camera Glitches?

What I’m attempting to achieve is an Arkham-like Grappling System. However, all was swell until I ran into the camera glitches. I’ve tried to use BodyVelocity but Body Movers mushed my brain to the point I gave up.

https://gyazo.com/044d6035dd67d1fa6af556c277700376 --Here is footage of me testing the Grappling System.

Here’s the current Server Script.

local TweenService = game:GetService("TweenService")
local Info = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)

local Tool = script.Parent
local Event = Tool.GrappleFireEvent

local Handle = Tool.Handle
local Bolt = Tool.Bolt

Event.OnServerEvent:Connect(function(Player, RaycastPosition, RaycastNormal)
	Handle.Fire_SFX:Play()
	
	local Character = Player.Character
	local RootPart = Character.HumanoidRootPart
	
	local FireTween = TweenService:Create(Bolt, Info, {Position = RaycastPosition + Vector3.new(0, -2, 0)})
	Bolt.Anchored = true
	FireTween:Play()
	
	for _, DescendantInstance in pairs(Bolt:GetDescendants()) do
		if DescendantInstance:IsA("Weld") then
			DescendantInstance:Destroy()
		end
	end
	
	FireTween.Completed:Wait()
	Bolt.Hit_SFX:Play()
	
	local GrappleTween = TweenService:Create(RootPart, Info, {Position = Bolt.Position})
	GrappleTween:Play()
end)

This seems to be a problem with the networking. Set the NetworkOwnership of the bolt like this Bolt:SetNetworkOwnership(Player) Basically the server doesn’t know what object the player is being moved by so it just glitches I believe

Well, the script is a server script, and also setting Bolt networkownership is impossible because Bolt is anchored, even if setting networkownership is possible, the tween is done on the server so there may be stuttering, although the main reason is the RootPart is not anchored.

The RootPart is not anchored, so when you are tweening, there is still physics being applied to the RootPart (which is gravity) so you need to anchor the RootPart. Also, when tweening characters to smoothly move them, it’s better to use CFrame.

RootPart.Anchored = true
local GrappleTween = TweenService:Create(RootPart, Info, {CFrame = CFrame.new(Bolt.Position)})
GrappleTween:Play()
GrappleTween.Completed:Wait()
RootPart.Anchored = false