圆形轨道公式不适用于 unity 3D
Circular orbit formula is not working in unity 3D
我正在开发一款游戏,我必须在其中实现一些 space 物理原理,例如轨道和重力....
我的主要问题是我无法使 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 上发布了一个问题,但任何建议都有效。
请帮助我解释为什么它不能以物理初学者的方式工作,我整个星期都被困在这件事上。
(x,y) 的垂直向量是 (y,-x) 的倍数,但你有 (x,-y)。您可以通过点积 x1*x2 + y1*y2
为 0.(1,2).(1,-2) = -3 来检查两个向量何时垂直。 (1,2).(2,-1) = 2-2 = 0.
顺便说一句,我不推荐混合力和速度。我会把你现在所说的 force 重命名为 speed。
我正在开发一款游戏,我必须在其中实现一些 space 物理原理,例如轨道和重力....
我的主要问题是我无法使 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 上发布了一个问题,但任何建议都有效。
请帮助我解释为什么它不能以物理初学者的方式工作,我整个星期都被困在这件事上。
(x,y) 的垂直向量是 (y,-x) 的倍数,但你有 (x,-y)。您可以通过点积 x1*x2 + y1*y2
为 0.(1,2).(1,-2) = -3 来检查两个向量何时垂直。 (1,2).(2,-1) = 2-2 = 0.
顺便说一句,我不推荐混合力和速度。我会把你现在所说的 force 重命名为 speed。