【发布时间】: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