2016-05-14 16 views
3

Для данного автомобиля я применил систему подвески на четырех колесах. Система основана на Законе Гука.Физика [UE4]: выполнить «максимальное сжатие» для подвески транспортного средства

Проблема: транспортное средство не должно касаться земли. При движении в сферическом контейнере (внутри) подвеска сжимается до 100%, заставляя шасси автомобиля касаться метро, ​​что приводит к нежелательным столкновениям, которые бросают автомобиль.

Несмотря на это маи являясь realistical поведения, наша игра нацелена на аркадном чувство, поэтому я ищу формулу для реализации максимального сжатия, так что шасси автомобиля не могут подойти ближе к метро чем X процентов от размера подвески в любой данный момент,, фактически не моделируя физический контакт между двумя жесткими кузовами. Таким образом, мне нужно применить поддельную силу к подвескам.

Мой текущий подход: Если шасси транспортного средства будет фактически касаться подвески базы, а (К сожалению, я не знаю, правильное слово, чтобы описать это, я имею в виду, когда подвеска при максимальном сжатии.) сила, равная по величине и противоположная по направлению относительно силы, нажимающей на подвеску, будет приложена к шасси транспортного средства, заставляя его перестать двигаться вниз.

Таким образом, я получаю свою скорость передвижения по всему миру V. Чтобы получить скорость вниз, я получаю DotProduct скорости и BodyUpVector.

float DownForceMagnitude = DotProduct(VelocityAtSuspension, BodyUpVector); 
FVector DownForce = DownForceMagnitude * BodyUpVector; 
FVector CounterForce = -DownForce * WeightOnSuspension; 

Хорошо, это псевдо-код работает несколько отлично, даже под землей, когда транспортное средство попадает на плоскость после прыжка. Однако вождение на растущем склоне (например, движение по внутренним стенкам сферы) делает подвеску максимально сжатой, поэтому, по-видимому, мой подход неверен.

Теперь я задаюсь вопросом, в чем причина. Мой расчет веса моделируется только VehicleWeight/4, так как Unreal Engine 4 не имеет функций для получения веса в определенном месте. Я не физик-профессионал, так что простите меня, если это легко вычислить. Это может быть проблема?

Мне не нужно физически 100% правдоподобное решение, мне просто нужно решение, которое работает, и в достаточной степени останавливает движение вашего транспортного средства вниз.

Любая помощь приветствуется. Привет,

+0

Очень сложно заставить такой код работать без хорошего понимания основной физики. Работает ли ваш подход на наклонной плоскости? – Beta

+0

Визуально кажется да, но я еще не выполнил 100% -ную отладку для этого. –

ответ

1

У меня была эта проблема с футуристическим магнитным кораблем на воздушной подушке.

Я решил ее за счет уменьшения силы на ЛУ в зависимости от уровня расширения суспензии следующим образом:

y = ln(ln(x+e)) 

где:

x = Suspension extension lvl in % (-> 0 being fully compressed) 
y = the factor that you multiply the force with 
e = eulers number 

Здесь графический, чтобы помочь, что это будет так:

https://ggbm.at/gmGEsAzE

ln - очень медленно растущая функция поэтому это так хорошо работает для этого.

Вы, вероятно, хотите, чтобы зажать значения (может быть между 0 и 100 ИДК точно, как ваш код ведет себя и как и хотят этот «разрыв» вести себя)

Портной функция для ваших потребностей, я просто хотел предложить u использую ln, как я сделал, чтобы решить эту проблему.

Я добавил e в x, чтобы сделать это через 0,0, если вы хотите, чтобы он остановился раньше, просто вычтите из x перед использованием ln.

Также обратите внимание, в зависимости от того, когда/как вы рассчитываете/обновляете свое приостановление (и любая функция, применяемая к силе, основанной на расширении уровней подвески), может не работать при определенных обстоятельствах или вообще.

 Смежные вопросы

  • Нет связанных вопросов^_^