我完全糊涂了。为什么臭名昭著的太空飞行模拟器中的轨道是稳定的、封闭的、像一个圆圈,而我的轨道却像带有电子的原子核。
也许值得使用其他一些我不知道的物理方法,或者我的计算中有错误,我不确定。下面是我的代码。
我马上说,轨迹的具体显示没有任何错误,物体实际上沿着轨迹清晰地移动。
void Gravity()
{
if (planet == null) return;
Vector2 dirToPlanet = (planet.transform.position - transform.position).normalized;
float dist = dirToPlanet.magnitude;
float gravityForce = gravitationalConstant * (shuttleMass * planetMass) / (dist * dist);
Vector2 gravity = dirToPlanet * gravityForce;
shuttleRB.AddForce(gravity * 0.1f);
}
感谢@StanislavVolodarskiy 回答这个问题,尽管不幸的是,并发表了评论:
这个问题的正确解决方案很简单:
诀窍在于,当在引力场中移动时,力矢量会根据引力势不断变化,如果你花费很长的时间,轨道与椭圆、抛物线或双曲线的差异就越大——你花费的时间间隔越长。使用。最简单的解决方案是减少计算点之间的时间间隔。更复杂的解决方案是当力的方向和大小连续变化时获得精确的轨道运动计算公式。但这里我们需要求解微分方程。如果您不是在笛卡尔坐标系中计数,而是在极坐标系中计数,那么您还需要计算虚拟科里奥利力并将其添加到公式中。
这是椭圆轨道,不是垃圾。行星和卫星也会发生同样的情况。在超高温中,冥王星通常比海王星更接近太阳!远地点和近地点可能差别不大,这完全取决于起始参数。如果你知道如何数数,你就能得到一个圆。
为什么使用它
AddForce
而不是属性分配velocity
?AddForce
考虑了模拟时间增量和 RidgidBody 质量 (+= force * FixedDeltaTime / mass
)。如果 和 不是来自物体的属性,那么shuttleMass
和来自哪里?planetMass