Я задал этот вопрос на форумах 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 км/ч и остается там. Я что-то упускаю? Как я могу получить высокую скорость и медленное ускорение?
Заранее спасибо.
Я думаю, что последний вариант ("медленно разгоняется до 500 км/ч и остается там ») - это то, что вы хотите, но это вопрос настройки ценностей. Если вы хотите избежать утверждений, попробуйте поиграть с разными уравнениями, вы умножаете сопротивление или скорость. Например, http://i.imgur.com/FACzbsQ.png. Вы также можете использовать 'log()' и 'sqrt()', но они медленны. Удачи! – meepzh
Эй, приятель, твоя идея полностью сработала! Спасибо огромное! Итак, вы сказали, что моя идея уравнения тяги была в целом правильной и обеспечивала приятную стартовую функцию. Но это было не идеально, поэтому я искал «S-образную функцию» и нашел «сигмоидную» функцию, которая абсолютно идеальна для этого случая! По прошествии часа или около того, я нашел форму, которая отлично работает для меня (может быть, это поможет кому-то с аналогичной проблемой): 6/(1 + e^(0,18 (x-0,5))) + 0,35. – flanker37
Это потрясающе, я рад, что все получилось! Спасибо за то, что вы разделили уравнение, я должен заглянуть в то, что сам haha – meepzh