Пятница, 29 Марта 2024, 10:13

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемы с симуляцией машины в Unity3d (WheelCollider, что с ним делать в случае...)
Проблемы с симуляцией машины в 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 коленчатого вала

Только если в твоей машине нет сцепления, нет передач, нет тормозов, нет инерции, разгоняется она мгновенно, а колеса никогда не блокируются :D
А в реальном мире если ты на стоящей машине нажмешь газ в пол, рпм двигателя подскочит до тысяч оборотов, а рпм колес в первый момент будет 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, Сделает, если захочет(да, я видел фул сообщение)

Чо я там написал хоть, не помню)

Ну а вообще за деньги сделаю красиво, да.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемы с симуляцией машины в Unity3d (WheelCollider, что с ним делать в случае...)
  • Страница 1 из 1
  • 1
Поиск:

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