using System.Security; using UnityEngine; using UnityEngine.InputSystem; public class FPSController : MonoBehaviour { [Header("Movement Speed")] [SerializeField] private float walkSpeed = 3.0f; [SerializeField] private float runMultiplier = 2.0f; [Header("Look Sensitivity")] [SerializeField] private float mouseSensitivity = 2.0f; [SerializeField] private float upDownRange = 80.0f; private Rigidbody rb; private Camera mainCamera; private PlayerInputHandler inputHandler; private Vector3 currentMovement; private float verticalRotation; private void Awake() { rb = GetComponent<Rigidbody>(); rb.constraints = RigidbodyConstraints.FreezeRotation; // Prevents tipping over mainCamera = Camera.main; inputHandler = PlayerInputHandler.Instance; } private void Update() { Cursor.lockState = CursorLockMode.Locked; HandleRotation(); } private void FixedUpdate() { HandleMovement(); } void HandleMovement() { float speed = walkSpeed * (inputHandler.RunValue > 0 ? runMultiplier : 1f); Vector3 inputDirection = new Vector3(inputHandler.MoveInput.x, 0f, inputHandler.MoveInput.y); Vector3 worldDirection = transform.TransformDirection(inputDirection); worldDirection.Normalize(); currentMovement = worldDirection * speed * Time.fixedDeltaTime; rb.MovePosition(rb.position + currentMovement); } void HandleRotation() { float mouseXRotation = inputHandler.LookInput.x * mouseSensitivity; Quaternion deltaRotation = Quaternion.Euler(0, mouseXRotation, 0); rb.MoveRotation(rb.rotation * deltaRotation); verticalRotation -= inputHandler.LookInput.y * mouseSensitivity; verticalRotation = Mathf.Clamp(verticalRotation, -upDownRange, upDownRange); mainCamera.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0); } }