Wheelcollider - как его использовать.

Научился сам? Помоги начинающему.

Re: Wheelcollider - как его использовать.

Сообщение Tolking 16 фев 2017, 10:08

Wheelcollider на танке? Здорово! И как он там должен работать? Гусеницы крутить?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 1885
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Wheelcollider - как его использовать.

Сообщение sledo 07 мар 2017, 21:44

End_User писал(а):Некоторые данные по Т-34-85 (1944 года):

Вес 30500кг.
Всё остальное, вроде 150кг дорожного колеса, сантиметры хода подвески, скорость, график и коэффициент трения... Всё это уже не важно и более настроить невозможно.
Wheel Collider начинает и не прекращает глючить.

Очень расплывчатое описание. Зачем вообще использовать Wheel Collider у танка? Катки танка единственно что делают - поддерживают машину на определенном уровне от земли и все. Нужно лишь сымитировать ход подвески относительно трака гусеницы, с чем отлично справится какой нибудь Joint, если лень писать зависимость самостоятельно. Главная проблема в том, как сделать гусеницы так, что бы они были похожи на гусеницы. В идеальном случае лучше вообще реализовать полную зависимость траков и замков на коллайдерах (главное прикинуть скорости движения коллайдеров к промежутку просчета физики, т.е. за 0,02 сек (Edit > Project Settings > Time > fixed timestep) при скорости движения гусеницы в 60 км/ч (16,7 м/с) замок трака пройдет 0,334м, значит надо будет уменьшать промежуток просчета физики) с применением физического материала и расчета сопротивления грунта. Вот тогда у вас будет танк. Но если подумать, то все это хозяйство можно упростить. Колеса и гусеницы по прежнему анимировать, а танк поставить на две гибкие платформы (это крайне важно делать ее из нескольких звеньев, поскольку должна быть зависимость звеньев друг от друга) с применением того же физического материала, которые толкать или тянуть AddForce, а другой стороны эмитировать натяжение. Те же яйца только в профиль, но все это намного быстрее.
Конечно при ближайшем рассмотрении гусеницы и колеса будут вести себя неестественно, но зато физика танка будет практически та же что и у настоящего.

Иначе, придется делать костыли. Например создавать 8 колес, анимировать гусеницу на каждый трак и привязывать их к колесам. Но это будет не танк, а не пойми что, а точнее многоколесный вездеход, который ну прям совсем не танк.
sledo
Старожил
 
Сообщения: 772
Зарегистрирован: 05 янв 2014, 15:44

Re: Wheelcollider - как его использовать.

Сообщение Rachok 20 апр 2017, 12:06

Добрый день! Читаю Ваш мануал по WheelCollider-у.
У меня при работе с ними возникла куча вопросов, при этом они более простые, чем те, что рассмотрены у Вас.
Основное управление WheelCollider-ом выполняется с помощью полей motorTorque (задание крутящего момента), brakeTorque (тормозной момент), steerAngle (угол поворота, обычно используется у ведущих колес).
С помощью motorTorque мы задаем крутящий момент, и вот тут у тех кто подзабыл механику начинаются проблемы.
Задавать крутящий момент для приводных колес можно так:
M=mgra/2, m - масса авто, g - 9.8, r - радиус колес, а - ускорение. Ускорение находим по формуле delta(v)/delta(t), Где и v и t берем из жизни, с реального автомобиля. Или придумываем свои.
Автомобиль начинает двигаться, но движется с ускорением. Дойти до свехзвука - не проблема.
Путь решения кажется очевидным: отключаем крутящий момент. Но он работает не так, как ХОЧЕТСЯ.
Рассмотрим самый простой вариант. Замеряем скорость автомобиля с помощью:
Синтаксис:
Используется csharp
НашаМашина.GetComponent<Rigidbody>().velocity.magnitude;

Это не самый лучший вариант, т.к. не он не учитывает ни направления движения (скорость движения на задней передаче должна быть ниже скорости движения вперед), ни рельефа, ни свободного падения. Но для начального этапа, на ровных поверхностях, этот метод можно использовать.
Если скорость машины больше максимально допустимой, то для каждого колеса устанавливаем
Синтаксис:
Используется csharp
WheelCollider wc = Wheel.GetComponent<WheelCollider>();
wc.motorTorque = 0f;

И что мы наблюдаем? После отключения крутящего момента скорость автомобиля не падает, а продолжает расти.
1. Почему скорость продолжает расти? Это связано с инерцией? Инерцией автомобиля или инерцией колеса? При уменьшении массы колес скорость быстрее прекращает расти (при отключении крутящего момента)... Если крутящий момент - это сила, то почему при его отключении мы наблюдаем такое явление? ПО ИДЕЕ ОН ДОЛЖЕН ПРЕКРАЩАТЬ НАБОР СКОРОСТИ СРАЗУ!
2. Как работать с тормозным моментом? Что это вообще за величина? Как им пользоваться? Есть ли какие-нибудь формулы для того, чтобы находить нужную величину тормозного момента.
Например.
2а. Как сделать движение автомобиля равномерным, если отключение крутящего момента не приводит к прекращению набора скорости?
2б. Как сделать движение автомобиля равнозамедяющимся? Мы знаем все о нашем автомобиле: скорость, массу, скорость вращения колес, крутящий момент, радиус колес. Т.е. формулу для равноускоренного движения я привел (M=mgra/2), а как делать остановку?
2в. Как сбросить скорость до нужной? Например, текущая скорость 60, мне нужна 30 в самые кратчайшие сроки. Как для этих целей использовать тормозной момент?
Или текущая скорость 60, мне нужно сбросить скорость до 30 через 30 секунд. (Или через 100 метров, это уже сложнее)

Было бы здорово, если ответы хотя бы на часть вопросов пополнили этот мануал.
Rachok
UNIт
 
Сообщения: 113
Зарегистрирован: 19 авг 2016, 09:07

Re: Wheelcollider - как его использовать.

Сообщение Rachok 22 апр 2017, 07:30

Так, допущена дикая ошибка.
Крутящий момент рассчитывается по формуле M=amr, a - ускорение, m - масса, r - радиус колеса.
Крутящий момент нужно прикладывать ко всем колесам авто? Если приложить крутящий момент в 20000Нм к задним колесам одного авто и по 1000Нм ко всем колесам другого - ускорение второго будет выше и заднеприводная машина никогда не догонит полноприводную. Получается, что если не прикладывать крутящий момент ко всем колесам, то машина ведет себя непредсказуемо, ее динамические характеристики не поддаются объяснению, она ведет себя не так, как вела бы себя машина с таким крутящим моментом.
Rachok
UNIт
 
Сообщения: 113
Зарегистрирован: 19 авг 2016, 09:07

Re: Wheelcollider - как его использовать.

Сообщение sledo 30 апр 2017, 17:40

Rachok писал(а):И что мы наблюдаем? После отключения крутящего момента скорость автомобиля не падает, а продолжает расти.
1. Почему скорость продолжает расти? Это связано с инерцией? Инерцией автомобиля или инерцией колеса? При уменьшении массы колес скорость быстрее прекращает расти (при отключении крутящего момента)... Если крутящий момент - это сила, то почему при его отключении мы наблюдаем такое явление? ПО ИДЕЕ ОН ДОЛЖЕН ПРЕКРАЩАТЬ НАБОР СКОРОСТИ СРАЗУ!
2. Как работать с тормозным моментом? Что это вообще за величина? Как им пользоваться? Есть ли какие-нибудь формулы для того, чтобы находить нужную величину тормозного момента.
Например.
2а. Как сделать движение автомобиля равномерным, если отключение крутящего момента не приводит к прекращению набора скорости?
2б. Как сделать движение автомобиля равнозамедяющимся? Мы знаем все о нашем автомобиле: скорость, массу, скорость вращения колес, крутящий момент, радиус колес. Т.е. формулу для равноускоренного движения я привел (M=mgra/2), а как делать остановку?
2в. Как сбросить скорость до нужной? Например, текущая скорость 60, мне нужна 30 в самые кратчайшие сроки. Как для этих целей использовать тормозной момент?
Или текущая скорость 60, мне нужно сбросить скорость до 30 через 30 секунд. (Или через 100 метров, это уже сложнее)

1) Колеса начинают проскальзвать и раскручиваться. Они набирают очень высокие обороты и к моменту когда вы считаете что ТС достигло своей скорости и обнуляете wc.motorTorque, то колеса просто потихоньку начинают сбрасывать обороты в соответствии с заданными силами трения, но сами крутятся намного быстрее чем двигается ТС. Соответственно ТС ускоряется до тех пор, пока не будет найдено равенство между оборотами колес и скоростью ТС. Что бы такого не происходило, необходимо создать ограничитель оборотов, такой же как в реальности. Т.е. если обороты колеса превысили допустим отметку в 5000 (или рассчитываем обороты двигателя - не важно), то обнуляем wc.motorTorque и прикладывает тормозное усилие от двигателя.
Что бы такого не происходило, нужно выводить контрольные данные с колеса, ТС и т.д., куда вам удобно. В идеальном случае, выводит каждое рассчитанное значение.
Сама же максимальная скорость, задается лобовым сопротивлением (при движении от двигателя) и тормозным моментом двигателя (например с горки). Искусственное ограничение максимальной скорости я считаю вредным (но не забываем о диапазоне просчета физики).
2) Тормоза это то же что и wc.motorTorque, только наоборот и без отрицательного явления. Есть сила которая замедляет обороты колеса, соответственно чем больше вы его прикладываете, тем быстрее будут снижаться обороты колеса. Оно линейное и не требует дополнительных действий.
2а...в) Боюсь вам придется самому выводить эту формулу, поскольку здесь лишь имитация физики и она не всегда совпадает с реальным положением дел. Провести зависимости не составляет труда. Я делал следующим образом - нашел ролик где человек дает перегазовку, засекал сколько времени потребуется для набора максимальных оборотов, сколько для достижения холостых оборотов, брал замерочные данные и подбирал усилия на колеса. Соответственно получал значения, с которыми уже дальше можно было работать по формулам.
sledo
Старожил
 
Сообщения: 772
Зарегистрирован: 05 янв 2014, 15:44

Пред.

Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1