Проблема с прыжком
| |
ArtemS | Дата: Пятница, 24 Января 2020, 17:33 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Добрый день, товарищи.
Столкнулся с такой проблемой. У меня стоит 4 платформы друг над другом, и если я начинаю прожемать много раз подряд пробел, то в вектор прыжка накапливается и каждый новый прыжок сильнее предыдущего. Как можно избежать эту проблему ?
Код if (Input.GetButtonDown("Jump") && _isGrounded == true) { _rigidbody2D.AddForce(Vector2.up * _playerStats.JumpHight * 10); {
Как бэ проверка на isGroundet есть, и работает корректно. В платформах использую компонент Platform Effector 2D. Пытался сделать без РБ, просто на смене координаты, но че-то не допираю как это сделать плавно.
Попытка со SmoothDamp
Код if (Input.GetButtonDown("Jump") && _isGrounded == true) { float speed = 0; transform.position = new Vector3(transform.position.x, Mathf.SmoothDamp(transform.position.y, transform.position.y + _playerStats.JumpHight, ref speed, .03f) , transform.position.z); }
и попытка с Lerp'ом не удались
Код if (Input.GetButtonDown("Jump") && _isGrounded == true) { transform.position = new Vector3(transform.position.x, Mathf.Lerp(transform.position.y, transform.position.y + _playerStats.JumpHight, 1f) , transform.position.z); }
Как определять, что коллизия произошла именно с пивотом или нижней точкой коллайдера, думаю это решит проблему ?
хуяк, хуяк и в продакшн
Сообщение отредактировал ArtemS - Пятница, 24 Января 2020, 17:37 |
|
| |
killing002 | Дата: Пятница, 24 Января 2020, 21:39 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Forcemode установи в случае с rb, мб решит. Если вектор где-то накапливается, то тут только один выход, перелопатить весь код и найти где это происходит.
123
|
|
| |
ArtemS | Дата: Суббота, 25 Января 2020, 08:34 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Цитата killing002 ( ) Forcemode установи в случае с rb, мб решит.
пробовал. в 2д всего 2 мода, сильно не разгуляешься.
Цитата Force Добавить Rigidbody2D постоянную силу, учитывая его массу. Impulse Добавить Rigidbody2D мгновенный импульс силы, учитывая его массу.
Цитата killing002 ( ) Если вектор где-то накапливается, то тут только один выход, перелопатить весь код и найти где это происходит.
Это происходит в момент, когда коллайдер объекта проходит через платформу, она снизу прозрачная получается, чтобы на нее можно было запрыгнуть. В этот момент isGrounded становится true, и так как вектор скорости еще имеет какое-то значение, то новый AddForce приплюсовывается к нему и мы летим еще дальше. Как сам вектор обнулять я не нашел, а лучше задавать ему фиксированное значение, чтобы он не становился больше.Добавлено (25 Января 2020, 13:55) --------------------------------------------- Решил через rb.velocity, совсем забыл про эту фичу
хуяк, хуяк и в продакшн
|
|
| |
killing002 | Дата: Суббота, 25 Января 2020, 14:29 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| Интересный случай, рискну предположить, что дело не в реализации прыжка, а в передвижении вообще. Если обратиться к математике, то все должно быть верно. Первый вектор - вектор прыжка, второй движения. И конечная сила(или вектор) высчитывается путем перемножения этих векторов. Если тебе это поможет, то вектор можно не обнулять, а нормализовать например. vector3.normilized - это сведение вектора любой величины к единичному, направление при котором остается неизменным.
123
Сообщение отредактировал killing002 - Суббота, 25 Января 2020, 14:30 |
|
| |
ShortKedr | Дата: Суббота, 25 Января 2020, 21:13 | Сообщение # 5 |
Renword Studio
Сейчас нет на сайте
| Цитата ArtemS ( ) Добрый день, товарищи.
Столкнулся с такой проблемой. У меня стоит 4 платформы друг над другом, и если я начинаю прожемать много раз подряд пробел, то в вектор прыжка накапливается и каждый новый прыжок сильнее предыдущего. Как можно избежать эту проблему ?
Код
if (Input.GetButtonDown("Jump") && _isGrounded == true) { _rigidbody2D.AddForce(Vector2.up * _playerStats.JumpHight * 10); {
Представь что есть объект который каждые пол-секунды попадает на поле ускорения, которое добавляет к его скорости ещё скорости в одном и том же направлении. Результат - н******но огромная скорость через некоторое кол-во таких ускорителей
Предположу, что у тебя это происходит из-за того, что ты добавляешь силу а не фиксировано задаешь в начале прыжка. Попробуй обнулить в начале прыжка rigidbody.velocity.y
Сообщение отредактировал ShortKedr - Суббота, 25 Января 2020, 21:16 |
|
| |
|