Hi, I have a problem where the player jitters like crazy when moving sideways but it is smooth when moving forward. I am guessing it is because the camera and how the players movment is reliant on it but i cant figure out how to fix it.
Here is the script for the camera:
using UnityEngine;
using UnityEngine.InputSystem;
public class CameraFollow : MonoBehaviour
{
public Transform player;
public InputActionReference look;
public float sensitivity;
public float smoothfollow = 0.1f;
public float looksmoothing = 0.1f;
public Vector3 offset = new Vector3(0, 5, -10);
private Vector2 lookdiraction;
void Update()
{
lookdiraction = look.action.ReadValue<Vector2>();
float xRotation = lookdiraction.y * sensitivity;
float yRotation = lookdiraction.x * sensitivity;
transform.RotateAround(player.position, Vector3.up, yRotation);
transform.RotateAround(player.position, transform.right, -xRotation);
transform.position = Vector3.Lerp(transform.position, player.position , smoothfollow);
}
}
Here is the player movment script:
using UnityEngine;
using UnityEngine.InputSystem;
public class Playermovment : MonoBehaviour
{
public InputActionReference move;
public InputActionReference jump;
public InputActionReference sprint;
public Transform playerpos;
public Rigidbody playerrb;
public float movespeed;
public float airspeed;
public float jumpforce;
public float rotationspeed;
public float jumpdelay;
public float checkdistance = 0.1f;
public float sprintspeed;
private Vector3 movedirection;
private bool isgrounded;
private float jumpdelaytimer = 0f;
private bool jumpdelaytimerstart = false;
public
void Start()
{
}
void Update()
{
if(movedirection != Vector3.zero)
{
Quaternion torotation = Quaternion.LookRotation(movedirection, Vector3.up);
playerpos.rotation = Quaternion.RotateTowards(playerpos.rotation, torotation, rotationspeed * Time.unscaledDeltaTime);
}
Vector2 moveInput = move.action.ReadValue<Vector2>();
Vector3 cameraForward = Camera.main.transform.forward;
Vector3 cameraRight = Camera.main.transform.right;
cameraForward.y = 0f;
cameraRight.y = 0f;
cameraForward = cameraForward.normalized;
cameraRight = cameraRight.normalized;
movedirection = cameraForward * moveInput.y + cameraRight * moveInput.x;
jumpdelaytimer -= Time.unscaledDeltaTime;
isgrounded = Physics.Raycast(playerpos.position, Vector3.down, checkdistance);
if(isgrounded == false)
{
if(sprint.action.ReadValue<float>() > 0)
{
playerpos.position += movedirection * sprintspeed * airspeed * Time.unscaledDeltaTime;
}
else
{
playerpos.position += movedirection * movespeed * airspeed * Time.unscaledDeltaTime;
}
}
else
{
if(sprint.action.ReadValue<float>() > 0)
{
playerpos.position += movedirection * sprintspeed * Time.unscaledDeltaTime;
}
else
{
playerpos.position += movedirection * movespeed * Time.unscaledDeltaTime;
}
}
if(jumpdelaytimerstart == true)
{
jumpdelaytimer -= Time.unscaledDeltaTime;
if(jumpdelaytimer < 0)
{
jumpdelaytimerstart = false;
playerrb.AddForce(Vector3.up * jumpforce, ForceMode.Impulse);
}
}
}
private void OnEnable()
{
jump.action.started += JUMP;
}
private void OnDisable()
{
jump.action.started -= JUMP;
}
private void JUMP(InputAction.CallbackContext obj)
{
if(isgrounded == true)
{
jumpdelaytimer = jumpdelay;
jumpdelaytimerstart = true;
}
}
}