【发布时间】:2020-01-19 15:37:51
【问题描述】:
我正在尝试使用 Unity 制作一款游戏,该游戏使用在轨火箭并且可以过渡到不同的行星,但我需要实时预测火箭路径,具体取决于火箭分配的当前速度/方向就像spaceflight simulator 一样。
在向刚体添加重力时,我设法获得了逼真的物理和轨道:
var sateliteCords = Satelite.transform.position;
var planetCords = gameObject.transform.position;
var distance = sateliteCords - planetCords;
distanceFromSatelite = Vector3.Distance(Satelite.transform.position, gameObject.transform.position);
F = (Gravity * Mass) / Mathf.Pow(distanceFromSatelite,2);
forces = (distance / Mathf.Sqrt(Mathf.Pow(distance.x, 2)+ Mathf.Pow(distance.y, 2)+ Mathf.Pow(distance.z, 2))) * -F;
Satelite.GetComponent<Rigidbody>().AddForce(forces * Time.deltaTime, ForceMode.Force);
但我不知道如何预测未来的时间点来给我轨道形状。
我试过用Time.timeScale = 50;“加速模拟”,但速度还不够快。
我在某处读到,我需要一份太阳系的副本,从统一更新中独立运行,并从那里计算火箭轨迹,但我不知道如何处理。
在物理模拟方面我有点菜鸟,所以请各位天才帮忙?
【问题讨论】:
-
您可以并行模拟物理,但 1. Unity 不支持,因此您必须实现自己的物理引擎,并且 2. 它可能是不必要的计算密集型。更好的方法是使用patched conic approximation 来近似轨道轨迹。我不知道这方面的任何规范指南,但这是我在谷歌上找到的幻灯片,可以帮助您入门:maia.ub.edu/dsg/wsem/documents/PatchedConics.pdf
-
如果你能把这个问题分解成更小的部分,我们可能可以回答这些部分,但正如所写的那样,我想说这个问题太宽泛了。从头开始编写一个完整的补丁圆锥逼近器对于一个答案来说太宽泛了。
-
@Ruzihm Unity 实际上确实现在支持。自 2018.3 起实施。见Multi-Scene Physics on this page。 ---关于实施指南,我也不知道,但我没有研究过。如果您查看 KSP(Kerbal Space Program),可能会有一些关于它的博文。
-
@XenoRo 整洁!我不知道它的存在。进一步看,您似乎可以使用它来模拟当前
Update调用中的多个时间步长。不确定它的性能如何,但这可以解决问题! -
@Ruzihm 非常感谢您提供的信息,我找到了一个更简单的解决方案,但我会在未来研究修补圆锥近似,因为我确实想开始学习一些天体物理学和其他东西(大多数它仍然在我的头上)
标签: c# unity3d simulation physics orbit