How do I get rid of the stuttering? This is very apparent when the mouse is moving slowly. I also know players who are used to seeing 60FPS gameplay will get headaches because of this.

Full code:
Child class. This class is placed on the tiny little sphere, which acts like a cursor. This is the main component that’s driving the pick-up game mechanic:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FixedImpulseCursor : FixedCursor {
public Camera mainCamera;
public float intensity;
public override void Start() {
base.Start();
this.intensity = 1000f;
}
public override void Update() {
if (Input.GetMouseButton(0)) {
this.isPicking = true;
if (this.detectedObjects.Count > 0) {
this.pickedObject = this.detectedObjects[0].gameObject;
}
}
else {
this.isPicking = false;
if (this.pickedObject != null)
this.pickedObject = null;
}
if (this.isPicking) {
if (this.pickedObject != null) {
if (this.cursor.GetComponent<FixedJoint>() == null) {
this.joint = this.cursor.gameObject.AddComponent<FixedJoint>();
this.joint.connectedBody = this.pickedObject.GetComponent<Rigidbody>();
if (joint.connectedBody == null) {
Object.Destroy(joint);
}
this.joint.connectedAnchor = this.pickedObject.transform.position;
this.joint.enableCollision = false;
this.joint.anchor = this.cursor.transform.position;
}
if (Input.GetKey(KeyCode.E)) {
this.LetGo();
this.isPicking = false;
Rigidbody body = this.pickedObject.GetComponent<Rigidbody>();
if (body != null) {
body.AddForce(this.mainCamera.transform.forward * this.intensity);
}
this.pickedObject = null;
}
}
}
else {
this.LetGo();
}
}
}
Parent class:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FixedCursor : MonoBehaviour {
public SphereCollider cursor;
public bool isPicking;
public List<Transform> detectedObjects = new List<Transform>();
protected GameObject pickedObject;
protected FixedJoint joint;
protected void LetGo() {
FixedJoint joint = this.cursor.gameObject.GetComponent<FixedJoint>();
if (joint != null) {
this.joint.connectedBody.drag = 0f;
this.joint.connectedBody.angularDrag = 0.05f;
Object.Destroy(joint);
}
}
public virtual void Start() {
this.isPicking = false;
}
public virtual void Update() {
if (Input.GetMouseButton(0)) {
this.isPicking = true;
if (this.detectedObjects.Count > 0) {
this.pickedObject = this.detectedObjects[0].gameObject;
}
}
else {
this.isPicking = false;
if (this.pickedObject != null)
//this.pickedObject.transform.parent = null;
this.pickedObject = null;
}
if (this.isPicking) {
if (this.pickedObject != null) {
if (this.cursor.GetComponent<FixedJoint>() == null) {
this.joint = this.cursor.gameObject.AddComponent<FixedJoint>();
this.joint.connectedBody = this.pickedObject.GetComponent<Rigidbody>();
if (joint.connectedBody == null) {
Object.Destroy(joint);
}
this.joint.connectedAnchor = this.pickedObject.transform.position;
this.joint.enableCollision = false;
this.joint.anchor = this.cursor.transform.position;
}
}
}
else {
this.LetGo();
}
}
public void OnTriggerEnter(Collider other) {
if (!this.detectedObjects.Contains(other.transform) && other.transform.tag.Equals("Object"))
this.detectedObjects.Add(other.transform);
}
public void OnTriggerExit(Collider other) {
if (this.detectedObjects.Contains(other.transform) && other.transform.tag.Equals("Object"))
this.detectedObjects.Remove(other.transform);
}
}