You could do it fully within the physics engine. If you know the AssemblyMass of your character, then you can apply a constant force towards wherever the attachment point of the web is that equals the weight (mass * gravity) of your character. You’d probably have to disable movement while you’re swinging so the character controller doesn’t interfere, but it’s an option.
You can visualise with the beam, but utilise constraints (spring/rope) to handle the physics.
This is of course depending on whether or not you want your spiderman to swing ‘realistically’. If you just want it to pull in the direction of the camera then take the lookVector’s X/Z coordinates:
local NormalizedLookVector = Vector3.new(Camera.CFrame.lookVector.X, 0, Camera.CFrame.lookVector.Z).Unit;
To get the direction of travel on the horizontal plane. You could create an ‘imaginary point’ at some distance above and in-front of the camera (along that lookVector) then there’s a few ways you could approach it.
Constraints/Forces (like I demonstrated previously)
A single impulse velocity (similar to what you did)
Some sort of mathematical pendulum function to get the tangential acceleration vector at each point during the swing, something like:
local radialVector = (HumanoidRootPart.Position - webAttachment.Position);
local upVector = Vector3.new(0, 1, 0); -- 'up' in world-space
local tangentialVector = radialVector:Cross(upVector).Unit; -- The direction the character should accelerate at that point during the pendulum
If you combined the above with a rope constraint (with winch to ‘pull’ the character towards it?) and updated a VectorForce/BodyVelocity every physics step using that tangentialVector then you should be able to get a decent amount of control over how fast the swing is. Take care though, because once the character passes underneath the attachment point the unit vector will invert and start pointing backwards (as the direction the character should be accelerating towards is now behind).