对于给定的车辆,我在四个轮子上实现了一个悬挂系统。该系统基于胡克定律。
问题:车辆不能接触地面。在球形容器(内部)中行驶时,悬架会被压缩至 100%,使车辆底盘接触地下,从而导致车辆发生意外碰撞。
尽管这可能是一种现实的行为,但我们的游戏旨在营造一种街机感觉,所以我正在寻找一个实现最大压缩的公式,这样车辆底盘就不会比悬架尺寸的 X% 更接近地下在任何给定时刻,无需实际模拟两个刚体之间的物理接触。因此,我需要对悬架施加假力。
我目前的方法: 如果车辆底盘实际上会接触悬架底座(对不起,我不知道合适的词来描述这个。我的意思是,当悬架处于最大压缩状态时),一个大小相等但相反的力相对于推动悬架的力的方向将施加到车辆底盘,迫使其停止向下移动。
因此,我收到了我的车辆世界速度 V。为了获得向下速度,我获得了速度的 DotProduct 和 BodyUpVector。
float DownForceMagnitude = DotProduct(VelocityAtSuspension, BodyUpVector);
FVector DownForce = DownForceMagnitude * BodyUpVector;
FVector CounterForce = -DownForce * WeightOnSuspension;
好的,当车辆在跳跃后降落在飞机上时,这个伪代码即使在地下也能正常工作。然而,在越来越大的坡度上行驶(比如在球体的内壁上行驶),无论如何都会使悬架达到最大压缩,所以显然我的方法是不正确的。
我现在想知道是什么原因。我的重量计算仅由 VehicleWeight / 4 模拟,因为虚幻引擎 4 没有在给定位置接收重量的功能。我不是物理专业人士,如果这很容易计算,请原谅我。这可能是问题吗?
我不需要一个物理上 100% 合理的解决方案,我只需要一个有效的解决方案,并充分阻止我的车辆底盘的向下运动。
任何帮助表示赞赏。问候,