Наурызбай Асенов
Мастер
(1225)
1 год назад
Похоже, у вас возникла проблема с проверкой гравитации. Убедитесь, что контроллер вашего персонажа настроен правильно, а на объектах, с которыми взаимодействует персонаж, имеются коллайдеры. Кроме того, рассмотрите возможность использования else вместо проверки if и else if для клавиши LeftShift.
Вот модифицированная версия вашего кода с некоторыми изменениями:
private void Gravity() {
if (!_cc.isGrounded) {
_cc.Move(Vector3.down * Time.deltaTime * _gravityForce);
}
}
private void Move() {
// Run
if (Input.GetKey(KeyCode.LeftShift)) {
_tmpSpeed = _runSpeed;
}
else {
_tmpSpeed = _walkSpeed;
}
// Movement
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 moveDirection = new Vector3(h, 0, v);
_cc.Move(moveDirection * Time.deltaTime * _tmpSpeed);
}
private void Update() {
Move();
Gravity();
}
Эти изменения должны помочь решить проблему гравитации. Убедитесь, что у вашего персонажа есть коллайдер, а также у земли тоже есть коллайдер, чтобы проверка isGrounded работала точно.
Вот код: https://github.com/GarelkaILCPP/code/blob/main/code