Advertisement
leomovskii

PlayerController

Apr 23rd, 2025
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.23 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class PlayerController : MonoBehaviour {
  4.  
  5.     private static PlayerController _me;
  6.     public static PlayerController Me {
  7.         get {
  8.             if (_me == null)
  9.                 _me = GameObject.FindObjectOfType<PlayerController>();
  10.             return _me;
  11.         }
  12.     }
  13.  
  14.     public float speed;
  15.     public float jumpHeight;
  16.     public float gravity = 20f;
  17.  
  18.     public float crouchHeight = 0.9f;
  19.     public float crouchCameraHeight = 0.6f;
  20.     public float crouchTransitionSmooth = 5f;
  21.  
  22.     [Space]
  23.  
  24.     public Transform cameraTransform;
  25.     public float horizontalSensitivity = 1f;
  26.     public float verticalSensitivity = 1f;
  27.     public float pitchMin = -70f;
  28.     public float pitchMax = 80f;
  29.  
  30.     [Space]
  31.  
  32.     public LayerMask playerLayer;
  33.     public Transform aimPoint;
  34.  
  35.     private CharacterController _controller;
  36.     private Health _health;
  37.     private Vector3 _input;
  38.     private Vector3 _verticalVelocity;
  39.     private Vector3 _yawVector;
  40.     private Vector3 _currentPitch;
  41.  
  42.     private PlayerHUD _playerHud;
  43.     private float _standingHeight;
  44.     private float _standingCameraHeight;
  45.  
  46.     private void Start() {
  47.         _me = this;
  48.  
  49.         _controller = GetComponent<CharacterController>();
  50.         _currentPitch = cameraTransform.localEulerAngles;
  51.         _standingHeight = _controller.height;
  52.  
  53.         _standingCameraHeight = cameraTransform.position.y;
  54.  
  55.         _health = GetComponent<Health>();
  56.         _health.OnDeathEvent.AddListener(Endgame);
  57.  
  58.         _playerHud = FindObjectOfType<PlayerHUD>();
  59.         _playerHud.SetMouseLocked(true);
  60.         _health.healthBar = _playerHud.HealthBar;
  61.     }
  62.  
  63.     private void Update() {
  64.         CrouchUpdate();
  65.         MoveUpdate();
  66.         LookUpdate();
  67.     }
  68.  
  69.     private void MoveUpdate() {
  70.         bool isGrounded = _controller.isGrounded;
  71.  
  72.         _input.x = Input.GetAxisRaw("Horizontal");
  73.         _input.z = Input.GetAxisRaw("Vertical");
  74.         _input.Normalize();
  75.  
  76.         if (_verticalVelocity.y < -2f && isGrounded)
  77.             _verticalVelocity.y = -1f;
  78.  
  79.         Vector3 moveVector = transform.forward * _input.z + transform.right * _input.x;
  80.         _controller.Move(speed * Time.deltaTime * moveVector);
  81.  
  82.         if (Input.GetKeyDown(KeyCode.Space) && isGrounded) {
  83.             _verticalVelocity.y = Mathf.Sqrt(jumpHeight * 2f * gravity);
  84.         }
  85.  
  86.         _verticalVelocity.y -= gravity * Time.deltaTime;
  87.         _controller.Move(_verticalVelocity * Time.deltaTime);
  88.     }
  89.  
  90.     private void LookUpdate() {
  91.         _yawVector.y = Input.GetAxis("Mouse X") * horizontalSensitivity;
  92.         float pitch = Input.GetAxis("Mouse Y") * verticalSensitivity;
  93.  
  94.         transform.Rotate(_yawVector);
  95.  
  96.         _currentPitch.x = Mathf.Clamp(_currentPitch.x - pitch, pitchMin, pitchMax);
  97.         cameraTransform.localEulerAngles = _currentPitch;
  98.     }
  99.  
  100.     private void CrouchUpdate() {
  101.         bool crouching = _controller.isGrounded && Input.GetKey(KeyCode.LeftControl);
  102.         float targetHeight = crouching ? crouchHeight : _standingHeight;
  103.         Vector3 cameraTarget = new Vector3(0f,crouching ? crouchCameraHeight : _standingCameraHeight, 0f);
  104.  
  105.         _controller.height = Mathf.Lerp(_controller.height, targetHeight, crouchTransitionSmooth * Time.deltaTime);
  106.         _controller.center = new Vector3(0f,_controller.height / 2, 0f);
  107.  
  108.         cameraTransform.localPosition = Vector3.Lerp(cameraTransform.localPosition, cameraTarget, crouchTransitionSmooth * Time.deltaTime);
  109.  
  110.         // call animator
  111.     }
  112.  
  113.     private void Endgame() {
  114.         Time.timeScale = 0f;
  115.         _playerHud.GameOver();
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement