Этот вопрос закрыт для ответов, так как повторяет вопрос Как сделать прыжок плавнее?

Как сделать прыжок плавным?

Реализую движение игрока при помощи Character Collider.
Всё вроде бы хорошо, но прыжок резкий, т.е он сразу, резко меняет Y координату, хотя гравитация реализованная по тому же принципу, и плавно опускает объект на земле, в отличии от прыжка.
Как это исправить, да и в целом, как можно улучшить качество говнокода?

Movement.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Movement : MonoBehaviour
{
    [Header("Скорость движения игрока")]
    [SerializeField]
    private float _speedPlayer; // Переменная со ск-тью игрока

    [Header("Скорость движения игрока")]
    [SerializeField]
    private float _speedRotate; // Переменная со ск-тью поворота игрока

    [Header("Сила гравитации")]
    [SerializeField]
    private float _forceGravity; // Переменная со ск-тью поворота игрока

    [Header("Сила прыжка")]
    [SerializeField]
    private float _forceJump; // Переменная со ск-тью поворота игрока

    [Header("Джостик")]
    [SerializeField]
    private VariableJoystick _joystickPlayer; // Переменная со ск-тью поворота игрока

    private CharacterController _playerController; // Контроллер движений игрока
    private bool _isJumpBtnClick; // Нажата ли кнопка прыжка

    public bool IsJumpBtnClick // Публичная переменная для управления другими скриптами
    {
        get { return _isJumpBtnClick; }
        set { _isJumpBtnClick = value; }
    }

    private void Start() { // Инициализация
        _playerController = gameObject.GetComponent<CharacterController>(); // Присваиваем контроллер игрока в переменную
    }

    private void FixedUpdate() { // Метод физических вычислений
        _moveFunction(); // Движение
        if(_playerController.isGrounded && IsJumpBtnClick) _jumpPlayer(); // Функция прыжка
        else _gravitationPlayer(); // Гравитация
    }

    private void _moveFunction() { // Функция движения
        float _corX = _joystickPlayer.Horizontal == 0 ? Input.GetAxis("Horizontal") : _joystickPlayer.Horizontal; // Получаем x
        float _corZ = _joystickPlayer.Vertical == 0 ? Input.GetAxis("Vertical") : _joystickPlayer.Vertical; // Получаем z
        if ( _playerController.isGrounded && (_corX != 0 || _corZ != 0 ) ) { // Если есть изменения
            Vector3 _moveDir = Vector3.zero; // Нулевой вектор движения
            Vector3 _rotateDir = Vector3.zero; // Нулевой вектор поворота отн. движения
            /* Задаем вектор движения */
            _moveDir.x = _corX; // Меняем x вектора движения
            _moveDir.z = _corZ; // Меняем z вектора движения
            /* Задем вектор поворота */
            _rotateDir.y = _corX; // Задаем поворот по горизонтали
            /* Задаем векторы отн. координат игрока */
            _moveDir = transform.TransformDirection(_moveDir);
            _rotateDir = transform.TransformDirection(_rotateDir);
            /* Поворачиваем */
            transform.Rotate(_rotateDir * _speedRotate); // Поворачиваем игрока на вектор, для плавности умножаем на скорость
            /* Задаем движение */
            _playerController.Move(_moveDir * _speedPlayer); // Двигаем игрока по вектору, для плавности умножаем на скорость
        }
    }

    private void _gravitationPlayer() { // Функция гравитации
        Vector3 _gravityDir = Vector3.zero; // Нулевой вектор
        _gravityDir.y -= _forceGravity * Time.fixedDeltaTime; // Плавно меняем y
        _playerController.Move(_gravityDir * _forceGravity); // Двигаем y плавно=)
    }

    private void _jumpPlayer() { // Функция прыжка
         Vector3 _upDir = Vector3.zero; // Нулевой вектор, чтобы ошибок не было и так по правасланаму
         _upDir.y += _forceJump; // Задаем y
         _playerController.Move(_upDir * Time.fixedDeltaTime); // Двигаем по y
         IsJumpBtnClick = false;
    }

    public void OnClickBtnJump () { // Функция кнопки прыжка
        IsJumpBtnClick = true; // Нажата кнопка
    }
}

  • Вопрос задан
  • 185 просмотров
Ответы на вопрос 1
DanielMcRon
@DanielMcRon
C# && Unity
Я понимаю... Склероз, напомню ещё раз

Как сделать прыжок плавнее?
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы