вопросы связанные с WheelCollider

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

вопросы связанные с WheelCollider

Сообщение xcube 30 окт 2012, 22:21

1) Можно ли как нибудь зафиксировать колеса на земле? т.е. чтобы колеса не отрывались от земли, или как нибудь ограничить дистанцию отрыва от земли
2) Как лучше всего ограничить скорость вращения rpm ? Я лучше чем включать тормоза при быстром вращении ничего не придумал:
Синтаксис:
Используется csharp
if(col.rpm >50 || col.rpm < -50)
        col.brakeTorque = maxBrake;
// maxBrake это флоат переменная
Но думаю это не оптимальный вариант :-? есть еще какой нибудь способ?
Изображение
Аватара пользователя
xcube
UNITрон
 
Сообщения: 304
Зарегистрирован: 23 сен 2011, 12:20
Откуда: Spb

Re: вопросы связанные с WheelCollider

Сообщение Kayler 30 окт 2012, 22:30

1. пускать райкаст вниз, получать координаты, назначать их колесу\WC
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: вопросы связанные с WheelCollider

Сообщение Syberex 30 окт 2012, 22:51

Значительно увеличить массу ригидбоди ...
Надавить сверху с неведомой силой :D

Если колесо слишком быстро крутится, может трение =0?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: вопросы связанные с WheelCollider

Сообщение xcube 30 окт 2012, 23:14

Спасибо за советы!
Кажется ответ на первый вопрос сам нашелся, в скрипте взятом отсюда есть строка
lp.y = w.wheelStartPos.y - wheelOffset;
именно из-за нее колеса иногда как бы немного дергались-прыгали, удалив ее проблема отпала сама собой.

Если колесо слишком быстро крутится, может трение =0?

Нет трение у меня 0.4, колесо крутится нормально с легкой пробуксовкой на старте, просто мой метод ограничения скорости какой-то кривой получается, скорость вращения колес (rpm) постоянно скачет от 50 до 120 что не есть гуд
Второй вопрос пока не могу решить.
Изображение
Аватара пользователя
xcube
UNITрон
 
Сообщения: 304
Зарегистрирован: 23 сен 2011, 12:20
Откуда: Spb

Re: вопросы связанные с WheelCollider

Сообщение Syberex 30 окт 2012, 23:32

Вот здесь мы ограничение скорости обсуждали, попоробуй.
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: вопросы связанные с WheelCollider

Сообщение xcube 31 окт 2012, 00:39

Попробовал реализовать эту мысль
Вместо того чтобы подавать тормозной момент, подавайте нулевой крутящий момент.

Я попробовал заменить тормоза на крутящий момент так
Синтаксис:
Используется csharp
if(col.rpm >50 || col.rpm < -50)
        maxAccel = 0; // maxAccel - множитель для motorTorque
 

Скорость стала ровней достаточно хороший результат, но на спуске машинка начинает сильно разгоняться, тормозов то не стало :-?
Жаль что свойство rpm доступно только для чтения, было бы так просто скорость регулировать )

Так же пробовал воздействовать силами Rigidbody - drag и angularDrag ни к чему хорошему не привело.
Последний раз редактировалось xcube 31 окт 2012, 01:05, всего редактировалось 1 раз.
Изображение
Аватара пользователя
xcube
UNITрон
 
Сообщения: 304
Зарегистрирован: 23 сен 2011, 12:20
Откуда: Spb

Re: вопросы связанные с WheelCollider

Сообщение Syberex 31 окт 2012, 01:02

скорость вращения колес (rpm) постоянно скачет от 50 до 120

Это вероятно изза
Синтаксис:
Используется csharp
col.brakeTorque = maxBrake;

сразу максимально жмем на тормоза ...

Еще можно попробовать плавно сбрасывать газ и плавно увеличивать тормоз. Я хотел прикрутить функцию y=x^2, что соответствовало бы плавности изгиба параболы. Точнее берем корень квадратный по времени, получаем значение крутящего/тормозного момента ...
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: вопросы связанные с WheelCollider

Сообщение xcube 31 окт 2012, 01:25

Syberex писал(а):
скорость вращения колес (rpm) постоянно скачет от 50 до 120

Это вероятно изза
Синтаксис:
Используется csharp
col.brakeTorque = maxBrake;

сразу максимально жмем на тормоза ...

Еще можно попробовать плавно сбрасывать газ и плавно увеличивать тормоз. Я хотел прикрутить функцию y=x^2, что соответствовало бы плавности изгиба параболы. Точнее берем корень квадратный по времени, получаем значение крутящего/тормозного момента ...


А ведь это выход! Спасибо за наводку
Вот что получилось в итоге
Синтаксис:
Используется csharp
if(col.rpm >70 || col.rpm < -70){ //  ограничение скорости
        if(col.rpm < 0){ //  если задний ход
                float t = col.rpm * -1;
                col.brakeTorque = t * 2;

                }else   //  если передний ход
        col.brakeTorque = col.rpm * 2;
}
 

Теперь скорость вращения стала гораздо стабильней и на спуске не гонит как сумасшедшая )
Изображение
Аватара пользователя
xcube
UNITрон
 
Сообщения: 304
Зарегистрирован: 23 сен 2011, 12:20
Откуда: Spb

Re: вопросы связанные с WheelCollider

Сообщение IDoNotExist 31 окт 2012, 07:30

Раскрою страшный секрет: я сделал ограничение максимальной скорости в TankTracksController на Ассет сторе с помощью AnimationCurve.
Смысл в том, что таким образом можно построить график зависимости крутящего момента от скорости в км/ч или от RPM, кому как удобней, ось x - это скорость в киломертах в час, ось y - это крутящий момент (пример в линке на 1:30). С помощью animationCurve.Evaluate() передаем текущий RPM с коллайдера, (либо переводим его в км/ч и потом передаем), и получаем крутящий момент, таким образом у меня танк почти никогда не разгоняется больше максимальной скорости, даже при спуске с гор.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: вопросы связанные с WheelCollider

Сообщение xcube 31 окт 2012, 12:25

IDoNotExist писал(а):Раскрою страшный секрет: я сделал ограничение максимальной скорости в TankTracksController на Ассет сторе с помощью AnimationCurve.
Смысл в том, что таким образом можно построить график зависимости крутящего момента от скорости в км/ч или от RPM, кому как удобней, ось x - это скорость в киломертах в час, ось y - это крутящий момент (пример в линке на 1:30). С помощью animationCurve.Evaluate() передаем текущий RPM с коллайдера, (либо переводим его в км/ч и потом передаем), и получаем крутящий момент, таким образом у меня танк почти никогда не разгоняется больше максимальной скорости, даже при спуске с гор.

Спасибо очень интересный подход, к тому же я еще не изучал AnimationCurve. Попробую реализовать.
Вобще странно что при таком подходе с горки танк не разгоняется... ведь к крутящему моменту(каким бы малым он ни был) добавляется ускорение от спуска. Или вы где то еще торможение применяете? Хотя возможно у танка мощное сцепление с землей поэтому торможение происходит за счет этого?
P.S.
Танк движется классно!
Изображение
Аватара пользователя
xcube
UNITрон
 
Сообщения: 304
Зарегистрирован: 23 сен 2011, 12:20
Откуда: Spb

Re: вопросы связанные с WheelCollider

Сообщение IDoNotExist 31 окт 2012, 13:40

Если передавать достаточно большой отрицательный крутящий момент, это будет все равно что передать BrakeTorque, если график на AnimationCurve уходит в минус по оси y допустим после 80 км/ч, то получается при любой скорости больше 80 км/ч уже будет передаваться отрицательный крутящий момент и понижать скорость до 80 км/ч, конечно итоговая скорость будет чуть больше 80 км/ч, но приблизительно на 2-3 км, никак ни на 10.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: вопросы связанные с WheelCollider

Сообщение Syberex 31 окт 2012, 23:12

IDoNotExist писал(а):Раскрою страшный секрет: я сделал ограничение максимальной скорости в TankTracksController на Ассет сторе с помощью AnimationCurve.
Смысл в том, что таким образом можно построить график зависимости крутящего момента от скорости в км/ч или от RPM, кому как удобней, ось x - это скорость в киломертах в час, ось y - это крутящий момент (пример в линке на 1:30). С помощью animationCurve.Evaluate() передаем текущий RPM с коллайдера, (либо переводим его в км/ч и потом передаем), и получаем крутящий момент, таким образом у меня танк почти никогда не разгоняется больше максимальной скорости, даже при спуске с гор.

Спасибо за секретную инфу, да надо было раньше сообразить и глянуть в ассет стор, но я то думал там тоже самое, что и на хабре :( ... на видео все очень хорошо показано :ymapplause:
Но что то у меня с этой физикой уже терпения не хватает X(
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: вопросы связанные с WheelCollider

Сообщение xcube 03 ноя 2012, 13:56

По умолчанию амортизация колеса осуществляется по вертикали, можно ли изменить угол этого движения?

Изображение
Изображение
Аватара пользователя
xcube
UNITрон
 
Сообщения: 304
Зарегистрирован: 23 сен 2011, 12:20
Откуда: Spb

Re: вопросы связанные с WheelCollider

Сообщение Kayler 04 ноя 2012, 00:55

xcube писал(а):По умолчанию амортизация колеса осуществляется по вертикали, можно ли изменить угол этого движения?

Изображение

ну так, засунуть в пустышку и наклонить не?
или тебе нужен такой эффект?
Скрытый текст:
Изображение
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: вопросы связанные с WheelCollider

Сообщение xcube 04 ноя 2012, 10:59

ну так, засунуть в пустышку и наклонить не?
или тебе нужен такой эффект?

Пробовал засовывать WheelCollider в пустышку и поворачивать ее, пробовал поворачивать и сам WheelCollider - не помогает, колесо все равно строго вертикально амартизирует.
Пытаюсь сделать не такой эффект как на картинке с машиной, а такой как у мотоцикла на переднем колесе, чтоб колесо двигалось(амартизировало) вдоль вилки а не вертикально.
Изображение
Изображение
Аватара пользователя
xcube
UNITрон
 
Сообщения: 304
Зарегистрирован: 23 сен 2011, 12:20
Откуда: Spb

След.

Вернуться в Почемучка

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

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