Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class CharacterMovement : MonoBehaviour
- {
- [SerializeField] private CharacterController _characterController;
- [SerializeField] private Camera _camera;
- [SerializeField] private float _moveSpeed;
- [SerializeField] private float _rotationSpeedHorizontal;
- [SerializeField] private float _rotationSpeedVertical;
- [SerializeField] private float _minRotationX;
- [SerializeField] private float _maxRotationX;
- private void Update()
- {
- Move();
- RotationHorizontal();
- }
- private void LateUpdate()
- {
- RotationVertical();
- }
- private void Move()
- {
- float inputX = Input.GetAxis("Horizontal");
- float inputZ = Input.GetAxis("Vertical");
- Vector3 moveDirection = transform.forward * inputZ + transform.right * inputX;
- _characterController.Move(moveDirection * _moveSpeed * Time.deltaTime);
- }
- private void RotationHorizontal()
- {
- float rotationInputY = Input.GetAxis("Mouse X");
- transform.Rotate(Vector3.up * rotationInputY * _rotationSpeedHorizontal * Time.deltaTime);
- }
- private void RotationVertical()
- {
- float rotationInputX = Input.GetAxis("Mouse Y");
- _camera.transform.Rotate(Vector3.left * rotationInputX * _rotationSpeedVertical * Time.deltaTime);
- Vector3 localRotation = _camera.transform.localEulerAngles;
- localRotation.x = ClampAngle(localRotation.x, _minRotationX, _maxRotationX);
- localRotation.y = 0;
- localRotation.z = 0;
- _camera.transform.localEulerAngles = localRotation;
- }
- private float ClampAngle(float angle, float min, float max)
- {
- if (angle < 0)
- angle += 360f;
- if (angle > 180f)
- return Mathf.Max(angle, 360f + min);
- return Mathf.Min(angle, max);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement