Player Rotation is snapping

Hey!

I’m having some snapping issues, my players rotation just keeps snapping. i’m not sure what to do, can someone assist me.

here is my code.

using System.Collections;
using System.Collections.Generic;
using UnityEngine.EventSystems;
using UnityEngine;

public class WorldInteraction : MonoBehaviour
{
	public static WorldInteraction instance;

    public UnityEngine.AI.NavMeshAgent playerAgent;
	protected FloatingJoystick joystick;
	protected FloatingJoystick joystick2;

	public Rigidbody rigidbody;
	public Rigidbody playerBase;
	public Vector3 velocity1;
    float m_Speed = 10f;



	static protected float distanceTraveled;


	void Start()
	{
		instance = this;
		playerAgent = GetComponent<UnityEngine.AI.NavMeshAgent>();

		//find things in scene
		joystick = GameObject.Find("FloatingJoystick").GetComponent<FloatingJoystick>();
		joystick2 = GameObject.Find("FloatingJoystick2").GetComponent<FloatingJoystick>();


	}

    void Update()
	{
		//get movement from 
		velocity1 = new Vector3(joystick.Horizontal * m_Speed, rigidbody.velocity.y, joystick.Vertical * m_Speed);
		rigidbody.velocity = velocity1;
		
		//rotation
		var input = new Vector3(joystick2.Horizontal, 0, joystick2.Vertical);
		if (input != Vector3.zero)
		{
			rigidbody.transform.forward = input;
		}
        

		if (Input.GetMouseButtonDown(0) && !UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())
		{
			GetInteraction();
		}
	}
}

If the snapping is just the direct result of unsmooth input you could just add some smoothing, either on the input vector or on the rotation. You could try something like this to smooth the rotation

Quaternion targetRotation;
float smoothAmount = 1; //Play with this value

void Update(){
    Vector3 input;

    //Get input here

    targetRotation = Quaternion.LookRotation(input); //Get unsmoothed rotation

    //Set our rigidbody rotation to some intermediate rotation value every frame
    Quaternion actualRotation = Quaternion.Slerp(rigidbody.transform.rotation, targetRotation, smoothAmount*Time.deltaTime);
    rigidbody.MoveRotation(actualRotation);
}