Проблемы с симуляцией машины в Unity3d
| |
killing002 | Дата: Пятница, 24 Января 2020, 21:30 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Приветствую всех. Возникла следующая проблема.. Задача стоит создать машину. 3д модель была успешно смоделирована, следующий этап - код. Решил все это дело провернуть через wheelcollider'ы , все расставил, настроил.. Вроде ездит и поворачивает. Но как сделать переключение скоростей? Изначально просто через скрипт изменял motorTorque, но позже понял, что это крутящий момент колеса, то есть это не скорость автомобиля.. Идея заключается в том, чтобы при определенной передаче, машина разгонялась до определенной скорости и не выше. Не понимаю, как это можно реализовать.. Спасайте..
123
|
|
| |
ShortKedr | Дата: Суббота, 25 Января 2020, 02:00 | Сообщение # 2 |
Renword Studio
Сейчас нет на сайте
| Длина окружности - есть расстояние, которое проходит точка на круге за 1 оборот круга вокруг своей оси(ради личного эксперимента можешь взять батон колбасы и покатать его по столу и придти в выводу соответствующему). Считаешь длину окружности колеса, считаешь сколько оборотов в час колесо сделает с текущим крутящим моментом. перемножаешь, получаешь скорость в некоторых единицах, думаю у тебя это метры - вот и всё. Приблизительный радиус колеса можешь например в Unity померить как-нибудь, впрочем если ты моделил, должен точно знать
Сообщение отредактировал ShortKedr - Суббота, 25 Января 2020, 02:06 |
|
| |
drcrack | Дата: Суббота, 25 Января 2020, 02:24 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| По идее через motorTorque и надо это делать — раз уж ты все симулируешь, добавляешь новую сущность "мотор" и в зависимости от его RPM и текущей передачи (первое регулируется газом, второе — коробкой передач, т.е. это отдельные факторы) меняешь motorTorque на колесах как-то так:
wheel.motorTorque = engineHorsePower * 1.3596f * 9550 / engineRPM * gearMultiplier;
Коэффициент для перевода л.с. в киловатты я нашел в инете, да и в целом формулу расчета крутящего момента Твоя задача только подобрать gearMultiplier для каждой передачи для реалистичного поведения, а там и скорость ограничится сама
|
|
| |
killing002 | Дата: Суббота, 25 Января 2020, 15:43 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| Цитата ShortKedr ( ) Считаешь длину окружности колеса, считаешь сколько оборотов в час колесо сделает с текущим крутящим моментом. перемножаешь, получаешь скорость Вряд ли при перемножении получится скорость, скорее расстояние, которое пройдет это колесо при определенном крутящем моменте.
Цитата drcrack ( ) wheel.motorTorque = engineHorsePower * 1.3596f * 9550 / engineRPM * gearMultiplier;
Очень интересная формула, погуглил, в итоге решил быстро проверить. Очень уж заманчиво. Она мне показалась достаточно логичной, motorToque ограничивается обратным соотношением rpm(скорость поворота колеса), но это почему то привело к непредсказуемым результатам. В будущем обязательно в этом разберусь. Благодарю за наводку.
В итоге я пришел к своему довольно простому варианту. Исходил из того, что крутящий момент это прежде всего сила прилагающая к каждому метру расстояния. То есть пока motorTorque не ноль, то тело будет двигаться с ускорением. Пришел к выводу, что стоит мониторить rpm, и в зависимости от определенного значения просто обнулять motorTorque, вроде пока работает..
Всем спасибо, кто участвовал в этом..
123
|
|
| |
drcrack | Дата: Суббота, 25 Января 2020, 16:44 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| Цитата Пришел к выводу, что стоит мониторить rpm, и в зависимости от определенного значения просто обнулять motorTorque, вроде пока работает.. странная модель для симулятора, это ж просто жесть как нереалистично
|
|
| |
ShortKedr | Дата: Суббота, 25 Января 2020, 20:46 | Сообщение # 6 |
Renword Studio
Сейчас нет на сайте
| Цитата killing002 ( ) Вряд ли при перемножении получится скорость, скорее расстояние, которое пройдет это колесо при определенном крутящем моменте.
Если колесо не отрывается от поверхности - это и будет скоростью, машина же на колесах ездит а не по воздуху летает. Добавить к этому немного несложных условий и будет аркадная гоночка.
Для реалистичной, логичной симуляции вариант drcrack правильнее в сто раз
Сообщение отредактировал ShortKedr - Суббота, 25 Января 2020, 20:49 |
|
| |
drcrack | Дата: Воскресенье, 26 Января 2020, 03:52 | Сообщение # 7 |
старожил
Сейчас нет на сайте
| Цитата motorToque ограничивается обратным соотношением rpm(скорость поворота колеса) не колеса а двигателя
Цитата но это почему то привело к непредсказуемым результатам. какие значения использовал для gearMultiplier?
|
|
| |
killing002 | Дата: Воскресенье, 26 Января 2020, 16:34 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Цитата drcrack ( ) какие значения использовал для gearMultiplier?
Как я понял, gearMiltiplier отвечает за определенную передачу, использовал от 0 - до 5.
Цитата drcrack ( ) не колеса а двигателя В документации говорится об оси колеса.. В принципе можно установить параллели. WheelCollider.rpm - Current wheel axle rotation speed, in rotations per minute (Read Only).
123
|
|
| |
drcrack | Дата: Воскресенье, 26 Января 2020, 17:30 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| Цитата В документации говорится об оси колеса.. В принципе можно установить параллели. WheelCollider.rpm - Current wheel axle rotation speed, in rotations per minute (Read Only). ты точно мой пост прочитал?) там вообще нет WheelCollider.rpm
Цитата Как я понял, gearMiltiplier отвечает за определенную передачу, использовал от 0 - до 5. странные числа, ты где такую коробку видел? уж первые-то передачи точно понижающие попробуй 0.1 0.2 0.3 0.4 и тд, или можешь загуглить реальные передаточные отношения какого-нибудь авто
Сообщение отредактировал drcrack - Воскресенье, 26 Января 2020, 17:31 |
|
| |
ShortKedr | Дата: Воскресенье, 26 Января 2020, 21:47 | Сообщение # 10 |
Renword Studio
Сейчас нет на сайте
| Цитата killing002 ( ) В документации говорится об оси колеса.. В принципе можно установить параллели. WheelCollider.rpm - Current wheel axle rotation speed, in rotations per minute (Read Only).
Цитата drcrack ( ) ты точно мой пост прочитал?) там вообще нет WheelCollider.rpm
Кажется автор не понял, что ему нужно самому реализовать)
Wheel Collider - это лишь коллайдер для колеса транспорта, с релизованными фичами, что было легче транспорт сделать. Это не вся машина. У машины кроме колес ещё важные места есть, о которых drcrack писал выше
Сообщение отредактировал ShortKedr - Воскресенье, 26 Января 2020, 21:53 |
|
| |
killing002 | Дата: Понедельник, 27 Января 2020, 16:50 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| Цитата drcrack ( ) ты точно мой пост прочитал?) там вообще нет WheelCollider.rpm
Так, из всех входных данных мы имеем rpm колеса и по факту все. Воздействовать на машину мы можем только передавая крутящий момент на ведущие колёса. Проанализировал вашу формулу, и пришел к этой: motorTorque = P * 9950/RPM *gear * vAsix; Где rpm - поворот колеса, P - максимальная мощность машины, gear - условно текущая передача(0.1, 0.2 ... 0.5), vAsix - это единичный вектор, от него нам нужно только направление. Я пришел к выводу, что rpm колеса все таки можно приравнять к rpm двигателя, это ведь все равно rpm коленчатого вала , который передает крутящий момент на ось, если я правильно конечно понимаю. Написал простенький скрипт и вот результаты, я был кстати приятно удивлен, результат однако мне понравился. Если не отпускать кнопки газа, отметки rpm и motorTorque достигают своей максимальной отметки , если увеличивать gear , то увеличивается и максимальная отметка. Я считаю это результат, как думаете вы..
123
|
|
| |
drcrack | Дата: Понедельник, 27 Января 2020, 17:48 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Цитата Я пришел к выводу, что rpm колеса все таки можно приравнять к rpm двигателя, это ведь все равно rpm коленчатого вала , который передает крутящий момент на ось, если я правильно конечно понимаю. Я вообще не понимаю зачем тебе тут RPM колеса, оно никак не участвует в формуле и вообще не нужно В формуле 2 входных параметра — RPM двигателя (регулируется газом) и передаточное число (регулируется передачей, ну и плюс сюда запечена вся остальная трансмиссия включая редукторы и т.д.).
Цитата Я пришел к выводу, что rpm колеса все таки можно приравнять к rpm двигателя, это ведь все равно rpm коленчатого вала Только если в твоей машине нет сцепления, нет передач, нет тормозов, нет инерции, разгоняется она мгновенно, а колеса никогда не блокируются А в реальном мире если ты на стоящей машине нажмешь газ в пол, рпм двигателя подскочит до тысяч оборотов, а рпм колес в первый момент будет 0
Сообщение отредактировал drcrack - Среда, 29 Января 2020, 23:33 |
|
| |
LLL | Дата: Понедельник, 27 Января 2020, 19:47 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Цитата killing002 ( ) Спасайте.. Уже бигём!
Сообщение отредактировал LLL - Понедельник, 27 Января 2020, 22:18 |
|
| |
ShortKedr | Дата: Вторник, 28 Января 2020, 19:22 | Сообщение # 14 |
Renword Studio
Сейчас нет на сайте
| LLL, Сделает, если захочет(да, я видел фул сообщение)
|
|
| |
killing002 | Дата: Среда, 29 Января 2020, 23:24 | Сообщение # 15 |
почетный гость
Сейчас нет на сайте
| В скором времени мне эта информация понадобится. Благодарю за исчерпывающие ответы.
123
|
|
| |
LLL | Дата: Пятница, 31 Января 2020, 21:48 | Сообщение # 16 |
участник
Сейчас нет на сайте
| Цитата ShortKedr ( ) LLL, Сделает, если захочет(да, я видел фул сообщение) Чо я там написал хоть, не помню)
Ну а вообще за деньги сделаю красиво, да.
|
|
| |
|