圆形轨道公式不能用于统一3D

时间:2015-04-17 16:29:09

标签: unity3d formula game-physics orbital-mechanics

我正在开发一个游戏,我必须实现像轨道和重力这样的空间物理......

我的主要问题是我无法在行星(或其他物体)周围正确地制作游戏对象轨道,我试图用物理教科书中一个古老的着名公式来做到这一点:

  

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 ,但任何建议都有效。

请帮助我解释为什么它不是以物理学初学者的方式工作,我整整一周都陷入了这个问题。

1 个答案:

答案 0 :(得分:3)

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

顺便说一下,我不推荐混合力和速度。我会重命名你当前称为力的速度。