【问题标题】:Physics [UE4]: Implement a "maximum compression" for vehicle-suspension物理学 [UE4]:实现车辆悬架的“最大压缩”
【发布时间】:2023-03-18 05:48:01
【问题描述】:

对于给定的车辆,我在四个轮子上实施了悬挂系统。 该系统基于胡克定律。

问题:车辆不能接触地面。在球形容器(内部)中行驶时,悬架会被压缩至 100%,使车辆底盘与地下接触,从而导致车辆发生意外碰撞。

尽管这可能是一种真实的行为,但我们的游戏旨在营造一种街机的感觉,所以我正在寻找一个实现最大压缩的公式,以便车辆底盘可以' t 在任何给定时刻都比悬挂尺寸的 X% 更接近地下, 没有实际模拟两个刚体之间的物理接触。因此,我需要对悬架施加假力。

我目前的做法: 如果车辆底盘实际上会接触悬架底座(对不起,我不知道合适的词来描述这个。我的意思是,当悬架处于最大压缩时),一个大小相等但方向相反的力相对于推到悬架上的力将作用于车辆底盘,迫使其停止向下移动。

因此,我收到了我的车辆世界速度 V。 为了得到向下的速度,我得到了速度的 DotProduct 和 BodyUpVector。

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

好的,即使在地下,当车辆在跳跃后降落在飞机上时,这个伪代码也能正常工作。然而,在越来越大的坡度上行驶(例如在球体的内壁上行驶),无论如何都会使悬架达到最大压缩,所以显然我的方法是不正确的。

我现在想知道原因是什么。我的重量计算仅由 VehicleWeight / 4 模拟,因为虚幻引擎 4 没有在给定位置接收重量的功能。我不是物理专业人士,如果这很容易计算,请原谅我。会不会是这个问题?

我不需要物理上 100% 合理的解决方案,我只需要一个有效的解决方案,并充分阻止我的车辆底盘向下运动。

感谢任何帮助。 问候,

【问题讨论】:

  • 如果没有很好的基础物理知识,很难让这样的代码工作。你的方法在斜面上有效吗?
  • 视觉上似乎是的,但我还没有执行 100% 确保调试。

标签: c++ physics unreal-engine4 physx


【解决方案1】:

我遇到了一个未来派磁性气垫船的问题。

我通过根据悬架扩展级别将力减小 ln 来解决它,如下所示:

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 idk 之间,您的代码的行为方式以及您希望此“中断”的行为方式)

根据您的需要定制功能,我只是想建议您像我一样使用 ln 来解决这个问题。

如果你想让它更早停止,我首先将 e 添加到 x 以使其通过 0,0,只需在使用 ln 之前从 x 中减去。

另请注意,根据您计算/更新暂停的时间/方式,此(以及根据暂停级别的扩展应用于力的任何函数)在某些情况下或根本不起作用。

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多