如何修复Vector2.Distance()方法?

时间:2019-05-11 11:56:09

标签: c# unity3d

我在制作游戏时会使用具有自身引力的对象。我正在使用Vector2.Distance方法。当物体开始彼此靠近时,距离变小,但是当物体变为2时,距离又开始变大。

foreach (Rigidbody2D body in allRigidBodies)
{
    if (body.gameObject.layer == 8 && body.name != ThisBodyName)
    {
         AvrgPosition2D += body.position;
         AvrgMass += body.mass;
         count++;
    }
}
AvrgPosition2D = AvrgPosition2D / count;

AvrgPosition3D = AvrgPosition2D;

distance = Vector2.Distance(AvrgPosition3D, ThisBodyRB.position);

force = GravConstant * AvrgMass * ThisBodyMass / (distance * distance);

ThisBodyRB.AddForce(AvrgPosition3D * (float)force * Time.deltaTime);

AvrgMass = 0;
AvrgPosition2D -= AvrgPosition2D;
count = 0;

我也尝试过(AvrgPosition-ThisBodyRB.position).magnitude,但这并没有改变任何东西。

此外,我在2个对象上都有此脚本,但它们不会输出相同的距离。

1 个答案:

答案 0 :(得分:2)

您的行:

plot(-40:40/10, dnorm(-40:40/10), type = "l")

for (i in -4:4){
  if (i != 0){
    segments(i,0,i,dnorm(i))
  }
}

可能是问题所在。您要比较的位置是有关尸体的位置以及所有尸体的平均位置-有关尸体的位置。

据我所知,这条线根本没有必要,因为在获取平均位置时您根本不会考虑当前物体的位置。