如何精确计算addforce脉冲?

时间:2019-07-25 11:31:01

标签: unity3d physics

在最近的5天内,我一直想找出一个问题,基本上,我希望使用AddForce将对象移动特定的量,例如,假设1个单位,但是,当我使用此代码段

body.AddForce(new Vector3(1,0,0), ForceMode.Impulse);

而不是将其移动1个单位,从而使位置为

1,0,0

它移动了

0.03291207,0,0

所以我意识到这里有一个计算,所以我想也许每1个速度,它就会移动0.0329 ....,所以我计算出是否要将速度乘以30左右。放

body.AddForce(new Vector3(30,0,0), ForceMode.Impulse);

,但现在它将其移动了

37.92695,0,0

,所以我真的很困惑。因此,在制作电子表格然后复制并粘贴不同的速度及其工作方式之后,我终于弄清楚了。所以它的工作原理有点像这样:

基本上,有3件事,即输入值[我们称之为X],速度和位置。速度从X开始,每帧减少-0.2355

该位置开始于任何位置,然后有一个速度值,称为Y,现在Y以X除以100并乘以2开始,例如,如果X为1,则Y从0.02开始,然后从Y删除〜0.0048,所以现在是0.0152,然后每帧,位置都按Y值增加,并且每帧,Y都减少〜0.0048,〜0.0048为摩擦[我认为]。

现在,我知道它是如何工作的,我可以进行反向工程,然后我做到了!所以我想知道要使物体移动1个单位,我需要输入大约5.02的速度。因此,您可能想知道我是否知道,为什么要在这里发布?好吧,当我尝试同时在Z轴上移动它时,就会出现问题,例如

body.AddForce(new Vector3(1,0,1), ForceMode.Impulse);

现在它在两个轴上移动了

0.0500636,0,0.0500636

代替

0.03291207,0,0.03291207

。因此,这确实让我感到困惑,因此我制作了一个电子表格,然后复制并粘贴了不同的速度及其工作方式。事实证明,公式仍然相同,但是将0.2355和0.0048更改为例如

body.AddForce(new Vector3(1,0,1), ForceMode.Impulse);

,0.0048实际上是0.00332966,因此每帧Y都会减少0.00332966,但是如果有2个不同的数字,那么它们都有不同的0.0048,例如,如果是

body.AddForce(new Vector3(1,0,2), ForceMode.Impulse);

。对于1,值是0.00210584,表示Y每帧减少0.00210584,但是对于同一向量中的2,幻数为0.00421168,意味着Y每帧减少0.00421168。 这就是我遇到的问题,我无法弄清楚这些数字来自何处。我试着将它除,乘,减和加,但我无法弄清楚。因此,我非常感谢物理专家的帮助。请记住,我对物理学不太了解,只对代数和诸如此类的东西有点了解,所以我不知道它们之间的相关性。如果有人需要,这是我制作的表格,其中展示了从1到6的每个“幻数”,彩色正方形是非常相似的正方形enter image description here

很抱歉,如果这篇文章有点令人困惑,并且很抱歉,如果我不应该在这里问这个问题,但是我不确定我还能在栈中的其他地方问这个问题,那么整个话题都有点令人困惑,所以我不知道我是否解释得足够好,我有点累,所以如果您不了解任何内容,请发表评论,我会尽力回答,在此先感谢您的帮助:)

0 个答案:

没有答案