Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Linq;
- using UnityEngine;
- public class PlayerMovement : MonoBehaviour {
- public float speed;
- public float jumpHeight;
- public float gravity = 20f;
- [Space]
- public Transform cameraTransform;
- public float horizontalSensitivity = 1f;
- public float verticalSensitivity = 1f;
- public float pitchMin = -70f;
- public float pitchMax = 80f;
- [Space]
- public float _fallY = -20f;
- private CharacterController _controller;
- private Vector3 _input;
- private Vector3 _verticalVelocity;
- private Vector3 _yawVector;
- private Vector3 _currentPitch;
- private void Start() {
- Cursor.lockState = CursorLockMode.Locked;
- Cursor.visible = false;
- _controller = GetComponent<CharacterController>();
- _currentPitch = cameraTransform.localEulerAngles;
- }
- private void Update() {
- if (transform.position.y < _fallY) {
- var points = FindObjectsOfType<RespawnPoint>();
- if (points.Length > 0) {
- var nearest = points.OrderBy(respawn => Vector3.Distance(transform.position, respawn.transform.position)).FirstOrDefault();
- _controller.enabled = false;
- transform.SetPositionAndRotation(nearest.transform.position, nearest.transform.rotation);
- _controller.enabled = true;
- _verticalVelocity.y = 0f;
- } else {
- Debug.LogError("No respawns found");
- }
- }
- MoveUpdate();
- LookUpdate();
- }
- private void MoveUpdate() {
- bool isGrounded = _controller.isGrounded;
- _input.x = Input.GetAxisRaw("Horizontal");
- _input.z = Input.GetAxisRaw("Vertical");
- _input.Normalize();
- if (_verticalVelocity.y < -2f && isGrounded)
- _verticalVelocity.y = -1f;
- Vector3 moveVector = transform.forward * _input.z + transform.right * _input.x;
- _controller.Move(speed * Time.deltaTime * moveVector);
- if (Input.GetKeyDown(KeyCode.Space) && isGrounded) {
- _verticalVelocity.y = Mathf.Sqrt(jumpHeight * 2f * gravity);
- }
- _verticalVelocity.y -= gravity * Time.deltaTime;
- _controller.Move(_verticalVelocity * Time.deltaTime);
- }
- private void LookUpdate() {
- _yawVector.y = Input.GetAxis("Mouse X") * horizontalSensitivity;
- float pitch = Input.GetAxis("Mouse Y") * verticalSensitivity;
- transform.Rotate(_yawVector);
- _currentPitch.x = Mathf.Clamp(_currentPitch.x - pitch, pitchMin, pitchMax);
- cameraTransform.localEulerAngles = _currentPitch;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement