我制作了一个非常简单的程序,它在屏幕的边缘创建了edgecolliders,然后启动了一个椭圆,其中有一个circleCollider2d,它带有脉冲力。
我将所有碰撞器(边缘和圆圈)设置为使用弹性材料,弹性设置为1.0(无限弹跳)。
我有一个奇怪的问题,随着时间的推移,其中一个速度轴收敛到0.例如
this.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (100, 100), ForceMode2D.Impulse);
对象将开始以对角线方式移动,但是如果弹跳足够,则速度将在(100,0)和(-100,0)之间交替变化。这可能发生在x轴变为0或Y轴变为0的位置。这取决于在启动期间哪一个更高。
我不确定为什么会这样。基本上在视觉上,物体将开始反弹,并且在大约10次反弹之后,它将仅以直线来回反弹而不是保留另一个轴。我不知道为什么会那样做。我没有任何约束(我也尝试约束Z轴旋转,但没有做任何事情)。
所有边缘对撞机以及圆形对撞机的弹性都设置为1.0。 刚体的质量为1,所有阻力系数也设为0。 目的是让它无休止地反弹。答案 0 :(得分:0)
我将在这里回答我自己的问题,因为我刚刚意识到为什么一旦我观察到旋转的行为就会发生这种情况。我完全没有想到摩擦会牵涉到这一点,特别是因为在这种情况下摩擦导致每次都进行相同的模拟。
除了将弹性变为1之外,还必须将摩擦力转为0。