Вторник, 26 Ноября 2024, 02:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема с прыжком
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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг