using UnityEngine; using UnityEngine.InputSystem; public class PlayerJumpScript : MonoBehaviour { [SerializeField] private InputActionProperty _JumpButton; [SerializeField] private float _JumpHeight = 0f; // Высота прыжка [SerializeField] private CharacterController _CharacterController; [SerializeField] private LayerMask _GroundLayers; [SerializeField] private float rad = 0; private float _verticalVelocity = 0f; // Вертикальная скорость private float _gravity = Physics.gravity.y; // Гравитация private bool _isGrounded; private void Update() { _isGrounded = IsGrounded(); //if (_JumpButton.action.WasPressedThisFrame()) //{ // if (_isGrounded) // { // Debug.Log("Will Jump from gruond"); // } // else // { // Debug.Log("Not Jump"); // } //} // Если персонаж на земле, обнуляем вертикальную скорость и проверяем прыжок if (_isGrounded) { _verticalVelocity = -1f; // Небольшое значение, чтобы персонаж не зависал в воздухе // Если кнопка прыжка нажата if (_JumpButton.action.WasPressedThisFrame()) { Jump(); } } else { // Применяем гравитацию, если персонаж не на земле _verticalVelocity += _gravity * Time.deltaTime; } // Перемещение персонажа с учетом вертикальной скорости Vector3 movement = new Vector3(0, _verticalVelocity, 0); if (_CharacterController.enabled == true) { _CharacterController.Move(movement * Time.deltaTime); } } private bool IsGrounded() { return Physics.CheckSphere(transform.position, rad, _GroundLayers); // Радиус может быть отрегулирован } private void Jump() { if (_isGrounded) { // Применяем силу прыжка _verticalVelocity = Mathf.Sqrt(_JumpHeight * -2f * _gravity); // Формула для прыжка с заданной высотой } } }