Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.InputSystem;
- public class PlayerMovement : MonoBehaviour
- {
- public CharacterController controller;
- public InputActionReference moveActionRef;
- public InputActionReference lookActionRef;
- public float moveSpeed = 5f;
- public float gravity = -9.81f;
- public float groundedGravity = -2f;
- public float lookSensitivity = 2f;
- public Transform cameraTransform;
- public float pitchMin = -80f;
- public float pitchMax = 80f;
- private InputAction moveAction;
- private InputAction lookAction;
- private bool isMoving;
- private Vector2 moveInput;
- private Vector2 lookInput;
- private Vector3 velocity;
- private float pitch;
- void OnEnable()
- {
- moveAction = moveActionRef.action;
- lookAction = lookActionRef.action;
- moveAction.started += OnMoveStarted;
- moveAction.performed += OnMovePerformed;
- moveAction.canceled += OnMoveCanceled;
- lookAction.performed += OnLookPerformed;
- lookAction.canceled += OnLookCanceled;
- moveAction.Enable();
- lookAction.Enable();
- }
- void OnDisable()
- {
- moveAction.started -= OnMoveStarted;
- moveAction.performed -= OnMovePerformed;
- moveAction.canceled -= OnMoveCanceled;
- lookAction.performed -= OnLookPerformed;
- lookAction.canceled -= OnLookCanceled;
- }
- void OnMoveStarted(InputAction.CallbackContext ctx) => isMoving = true;
- void OnMovePerformed(InputAction.CallbackContext ctx) => moveInput = ctx.ReadValue<Vector2>();
- void OnMoveCanceled(InputAction.CallbackContext ctx)
- {
- isMoving = false;
- moveInput = Vector2.zero;
- }
- void OnLookPerformed(InputAction.CallbackContext ctx) => lookInput = ctx.ReadValue<Vector2>();
- void OnLookCanceled(InputAction.CallbackContext ctx) => lookInput = Vector2.zero;
- void Update()
- {
- if (isMoving)
- {
- Vector3 move = new Vector3(moveInput.x, 0f, moveInput.y);
- move = transform.TransformDirection(move);
- controller.Move(move * moveSpeed * Time.deltaTime);
- }
- if (controller.isGrounded && velocity.y < 0)
- velocity.y = groundedGravity;
- velocity.y += gravity * Time.deltaTime;
- controller.Move(velocity * Time.deltaTime);
- float yaw = lookInput.x * lookSensitivity;
- transform.Rotate(Vector3.up * yaw);
- if (cameraTransform != null)
- {
- pitch -= lookInput.y * lookSensitivity;
- pitch = Mathf.Clamp(pitch, pitchMin, pitchMax);
- cameraTransform.localRotation = Quaternion.Euler(pitch, 0f, 0f);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment