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