- Home /
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();
}
}
}
Comment
Best Answer
Answer by unity_ek98vnTRplGj8Q · May 18, 2020 at 04:52 PM
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);
}