@mild warren heres the code
MovementHandler
using UnityEngine;
public class MovementHandler : MonoBehaviour
{
#region VARIABLES
[Header("Objects")]
[SerializeField] Rigidbody RB;
[Header("Settings")]
[SerializeField] float MoveSpeed;
[SerializeField] float SprintSpeed;
[SerializeField] float AirSpeed;
[Header("Variables")]
[SerializeField] float CurrentSpeed;
public Vector3 MoveInput;
public Vector3 MoveDirection;
[Header("Scripts")]
[SerializeField] InputHandler InputHandler;
[SerializeField] CharacterHandler CharacterHandler;
[SerializeField] CooldownHandler CooldownHandler;
[SerializeField] CameraHandler CameraHandler;
#endregion
#region MAIN
private void Update()
{
Vector2 RawMove = InputHandler.GetInput("Move").ReadValue<Vector2>();
MoveInput = new Vector3(RawMove.x, 0f, RawMove.y);
if (MoveInput == Vector3.zero) return;
Quaternion CamDirection = Quaternion.Euler(0, CameraHandler.HorizontalLook, 0);
Vector3 Raw = new Vector3(MoveInput.x, 0f, MoveInput.z);
MoveDirection = (CamDirection * Raw).normalized;
}
private void FixedUpdate()
{
HandleMovement();
HandleJump();
}
#endregion
#region MOVEMENT
#region WALK + SPRINT
private void HandleMovement()
{
RB.MoveRotation(Quaternion.Euler(0,CameraHandler.HorizontalLook,0));
CurrentSpeed = CalculateSpeed();
if (MoveInput == Vector3.zero)
{
RB.linearVelocity = new Vector3(0f, RB.linearVelocity.y, 0f);
return;
}
Vector3 FinalDirection = MoveDirection * CurrentSpeed;
RB.linearVelocity = new Vector3(FinalDirection.x, RB.linearVelocity.y, FinalDirection.z);
}
#endregion
#endregion
}