【问题标题】:Circular orbit formula is not working in unity 3D圆形轨道公式在统一 3D 中不起作用
【发布时间】:2015-04-17 16:29:08
【问题描述】:

我正在开发一款游戏,我必须在其中实现一些空间物理学,例如轨道和重力......

我的主要问题是我无法正确围绕行星(或另一个物体)制作 GameObject 轨道,我正在尝试使用物理教科书中的一个古老的著名公式来做到这一点:

v = sqrt( G * ((m1 + m2)/r ))

其中v是轨道物体的速度,G是常数,m1和m2是轨道物体和行星的质量,r是到m1和m2中心的距离。

这是我的实现:

void circularOrbit(){
    // Get the distance between the two object centers .
    dist = new Vector2 (Planet.renderer.bounds.center.x - renderer.bounds.center.x, Planet.renderer.bounds.center.y - renderer.bounds.center.y);
    r = dist.magnitude;
    tdist = new Vector2 (dist.x, -dist.y).normalized; // 2D vector prependicular to the dist vector .
    float force = Mathf.Sqrt (G * ((mBody + mPlanet) / r)); // Calculate the velocity .
    rigidbody2D.velocity =  tdist * force;


}

circularOrbit 函数在 FixedUpdate 内的每一帧都被调用,统一为物理脚本编写提供。

现在这是一个足以解释我的问题的小 gif: http://makeagif.com/i/-JxBG8

这里还有一些关于我的设置的信息:

  • 怪物质量为 1 个单位,行星质量为 5 个单位。
  • 怪物的重力已关闭。
  • G 的值为 1(我已经测试了许多值但没有解决问题)

最后,我知道我不是第一个这样做的人,但我这周搜索了很多关于如何做到这一点,主要是我的代码是 Box2D 端口,经过了一些调整和更改,我在 GameDev.net here 上发布了一个问题,但任何建议都有效。

请帮助我解释为什么它不能以物理初学者的方式工作,我整个星期都被这件事困住了。

【问题讨论】:

    标签: unity3d formula game-physics orbital-mechanics


    【解决方案1】:

    与 (x,y) 垂直的向量是 (y,-x) 的倍数,但你有 (x,-y)。您可以通过它们的点积 x1*x2 + y1*y2 为 0. (1,2).(1,-2) = -3 来检查两个向量何时垂直。 (1,2).(2,-1) = 2-2 = 0.

    顺便说一句,我不推荐混合力和速度。我会重命名你目前所说的强制速度。

    【讨论】:

    • 您可能需要检查您的步长是否不会使物体太快地从地球上盘旋而出。您可以通过多种方式纠正此问题,例如调整位置以使与行星的距离保持恒定,或使用运动方程的更高阶近似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多