Advertisement
leomovskii

PlayerMovement

Mar 29th, 2025 (edited)
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.32 KB | None | 0 0
  1. using System.Linq;
  2. using UnityEngine;
  3.  
  4. public class PlayerMovement : MonoBehaviour {
  5.  
  6.     public float speed;
  7.     public float jumpHeight;
  8.     public float gravity = 20f;
  9.  
  10.     [Space]
  11.  
  12.     public Transform cameraTransform;
  13.     public float horizontalSensitivity = 1f;
  14.     public float verticalSensitivity = 1f;
  15.     public float pitchMin = -70f;
  16.     public float pitchMax = 80f;
  17.  
  18.     [Space]
  19.  
  20.     public float _fallY = -20f;
  21.  
  22.     private CharacterController _controller;
  23.     private Vector3 _input;
  24.     private Vector3 _verticalVelocity;
  25.     private Vector3 _yawVector;
  26.     private Vector3 _currentPitch;
  27.  
  28.     private void Start() {
  29.         Cursor.lockState = CursorLockMode.Locked;
  30.         Cursor.visible = false;
  31.  
  32.         _controller = GetComponent<CharacterController>();
  33.         _currentPitch = cameraTransform.localEulerAngles;
  34.     }
  35.  
  36.     private void Update() {
  37.         if (transform.position.y < _fallY) {
  38.             var points = FindObjectsOfType<RespawnPoint>();
  39.             if (points.Length > 0) {
  40.                 var nearest = points.OrderBy(respawn => Vector3.Distance(transform.position, respawn.transform.position)).FirstOrDefault();
  41.                 _controller.enabled = false;
  42.                 transform.SetPositionAndRotation(nearest.transform.position, nearest.transform.rotation);
  43.                 _controller.enabled = true;
  44.                 _verticalVelocity.y = 0f;
  45.  
  46.             } else {
  47.                 Debug.LogError("No respawns found");
  48.             }
  49.         }
  50.  
  51.         MoveUpdate();
  52.         LookUpdate();
  53.     }
  54.  
  55.     private void MoveUpdate() {
  56.         bool isGrounded = _controller.isGrounded;
  57.  
  58.         _input.x = Input.GetAxisRaw("Horizontal");
  59.         _input.z = Input.GetAxisRaw("Vertical");
  60.         _input.Normalize();
  61.  
  62.         if (_verticalVelocity.y < -2f && isGrounded)
  63.             _verticalVelocity.y = -1f;
  64.  
  65.         Vector3 moveVector = transform.forward * _input.z + transform.right * _input.x;
  66.         _controller.Move(speed * Time.deltaTime * moveVector);
  67.  
  68.         if (Input.GetKeyDown(KeyCode.Space) && isGrounded) {
  69.             _verticalVelocity.y = Mathf.Sqrt(jumpHeight * 2f * gravity);
  70.         }
  71.  
  72.         _verticalVelocity.y -= gravity * Time.deltaTime;
  73.         _controller.Move(_verticalVelocity * Time.deltaTime);
  74.     }
  75.  
  76.     private void LookUpdate() {
  77.         _yawVector.y = Input.GetAxis("Mouse X") * horizontalSensitivity;
  78.         float pitch = Input.GetAxis("Mouse Y") * verticalSensitivity;
  79.  
  80.         transform.Rotate(_yawVector);
  81.  
  82.         _currentPitch.x = Mathf.Clamp(_currentPitch.x - pitch, pitchMin, pitchMax);
  83.         cameraTransform.localEulerAngles = _currentPitch;
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement