Eonirr

Untitled

Aug 20th, 2026 (edited)
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.InputSystem;
  3.  
  4. public class PlayerMovement : MonoBehaviour
  5. {
  6. public CharacterController controller;
  7. public InputActionReference moveActionRef;
  8. public InputActionReference lookActionRef;
  9.  
  10. public float moveSpeed = 5f;
  11. public float gravity = -9.81f;
  12. public float groundedGravity = -2f;
  13.  
  14. public float lookSensitivity = 2f;
  15. public Transform cameraTransform;
  16. public float pitchMin = -80f;
  17. public float pitchMax = 80f;
  18.  
  19. private InputAction moveAction;
  20. private InputAction lookAction;
  21. private bool isMoving;
  22. private Vector2 moveInput;
  23. private Vector2 lookInput;
  24. private Vector3 velocity;
  25. private float pitch;
  26.  
  27. void OnEnable()
  28. {
  29. moveAction = moveActionRef.action;
  30. lookAction = lookActionRef.action;
  31.  
  32. moveAction.started += OnMoveStarted;
  33. moveAction.performed += OnMovePerformed;
  34. moveAction.canceled += OnMoveCanceled;
  35.  
  36. lookAction.performed += OnLookPerformed;
  37. lookAction.canceled += OnLookCanceled;
  38.  
  39. moveAction.Enable();
  40. lookAction.Enable();
  41. }
  42.  
  43. void OnDisable()
  44. {
  45. moveAction.started -= OnMoveStarted;
  46. moveAction.performed -= OnMovePerformed;
  47. moveAction.canceled -= OnMoveCanceled;
  48.  
  49. lookAction.performed -= OnLookPerformed;
  50. lookAction.canceled -= OnLookCanceled;
  51. }
  52.  
  53. void OnMoveStarted(InputAction.CallbackContext ctx) => isMoving = true;
  54.  
  55. void OnMovePerformed(InputAction.CallbackContext ctx) => moveInput = ctx.ReadValue<Vector2>();
  56.  
  57. void OnMoveCanceled(InputAction.CallbackContext ctx)
  58. {
  59. isMoving = false;
  60. moveInput = Vector2.zero;
  61. }
  62.  
  63. void OnLookPerformed(InputAction.CallbackContext ctx) => lookInput = ctx.ReadValue<Vector2>();
  64.  
  65. void OnLookCanceled(InputAction.CallbackContext ctx) => lookInput = Vector2.zero;
  66.  
  67. void Update()
  68. {
  69. if (isMoving)
  70. {
  71. Vector3 move = new Vector3(moveInput.x, 0f, moveInput.y);
  72. move = transform.TransformDirection(move);
  73. controller.Move(move * moveSpeed * Time.deltaTime);
  74. }
  75.  
  76. if (controller.isGrounded && velocity.y < 0)
  77. velocity.y = groundedGravity;
  78.  
  79. velocity.y += gravity * Time.deltaTime;
  80. controller.Move(velocity * Time.deltaTime);
  81.  
  82. float yaw = lookInput.x * lookSensitivity;
  83. transform.Rotate(Vector3.up * yaw);
  84.  
  85. if (cameraTransform != null)
  86. {
  87. pitch -= lookInput.y * lookSensitivity;
  88. pitch = Mathf.Clamp(pitch, pitchMin, pitchMax);
  89. cameraTransform.localRotation = Quaternion.Euler(pitch, 0f, 0f);
  90. }
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment