2016-06-27 4 views
0

Я задал этот вопрос на форумах Unity, но они кажутся гораздо менее населенными, чем SO, и я не получил приемлемого ответа. Вопрос в следующем: в моей игре (сделанной в Unity, C#) я использую физику (Rigidbody2D) и addForce для ускорения работы самолета. Добавленная сила пропорциональна тяге.Как сгладить (замедлить) ускорение самолета в Unity2D?

Проблема в том, что, если я добавлю много силы, я достиг реалистично высоких скоростей нереально. Если я добавлю меньше силы, у меня есть реалистичное ускорение, но максимальная скорость улиток. Я попытался сыграть с перетаскиванием, но уравнение уравнивает себя: в два раза меньше силы с удвоенным сопротивлением вызывают такое же ускорение и максимальную скорость. Увеличение массы замедляет ускорение, но пропорционально уменьшает максимальную скорость.

Теперь у меня есть несколько уравнений сопротивления в зависимости от скорости игрока, чтобы ограничить ускорение до управляемых уровней, но он чувствует себя очень неуклюжим (не говоря уже о неинтуитивном и нереалистичном).

Вот фрагменты моего кода:

//////////////////Adding thrust///////////////////////////// 
rb.AddForce(transform.right*thrust); //thrust goes from 0 to 100 
//////////////////Drag equations///////////////////////////// 
    if (rb.velocity.magnitude <= 3) 
      rb.drag = Mathf.Clamp(-rb.velocity.magnitude/8f + 4f, 2.1f, 4f); 
    else if (rb.velocity.magnitude <= 4) 
      rb.drag = Mathf.Clamp(-rb.velocity.magnitude/4.9f + 4f, 2.1f, 4f); 
    else if (rb.velocity.magnitude <= 7) 
      rb.drag = Mathf.Clamp(-rb.velocity.magnitude/2.9f + 4.15f, 1.1f, 4f); 
    else if (rb.velocity.magnitude <= 10) 
      rb.drag = Mathf.Clamp(-rb.velocity.magnitude/5f + 3.2f, 1f, 4f); 
    else 
      rb.drag = Mathf.Clamp(-rb.velocity.magnitude/18f + 1.7f, 0.8f, 4f); 

преобразования скорости от единиц до км/ч выглядит следующим образом:

speedText.text = "Speed: " + Mathf.Round(rb.velocity.magnitude * 50 * 3.6f) + "km/h"; 

Так rb.velocity.magnitude из 7 составляет 1260 км/ч ,

Без моих уравнений сопротивления корабль либо ускоряется до 2500 км/ч практически мгновенно, либо медленно разгоняется до 500 км/ч и остается там. Я что-то упускаю? Как я могу получить высокую скорость и медленное ускорение?

Заранее спасибо.

+0

Я думаю, что последний вариант ("медленно разгоняется до 500 км/ч и остается там ») - это то, что вы хотите, но это вопрос настройки ценностей. Если вы хотите избежать утверждений, попробуйте поиграть с разными уравнениями, вы умножаете сопротивление или скорость. Например, http://i.imgur.com/FACzbsQ.png. Вы также можете использовать 'log()' и 'sqrt()', но они медленны. Удачи! – meepzh

+0

Эй, приятель, твоя идея полностью сработала! Спасибо огромное! Итак, вы сказали, что моя идея уравнения тяги была в целом правильной и обеспечивала приятную стартовую функцию. Но это было не идеально, поэтому я искал «S-образную функцию» и нашел «сигмоидную» функцию, которая абсолютно идеальна для этого случая! По прошествии часа или около того, я нашел форму, которая отлично работает для меня (может быть, это поможет кому-то с аналогичной проблемой): 6/(1 + e^(0,18 (x-0,5))) + 0,35. – flanker37

+0

Это потрясающе, я рад, что все получилось! Спасибо за то, что вы разделили уравнение, я должен заглянуть в то, что сам haha ​​ – meepzh

ответ

0

Благодаря идее meepzh, я был в состоянии найти рабочее решение: Я нашел функцию «сигмовидной», вот уравнение, которое прекрасно работает в моем случае: 6/(1+e^(0.18(x-0.5)))+0.35.

 Смежные вопросы

  • Нет связанных вопросов^_^