OnCollisionEnter2D接触点不正确? - Unity2D

时间:2015-03-11 09:40:05

标签: collision-detection unity3d-2dtools rigid-bodies

我正在尝试向另一个敌人物体(rigidbody2d,运动学,circlecollider2d)射击子弹(rigidbody2d,boxcollider2d)。我想要这两者之间的碰撞点。当它们发生碰撞时,我想要碰撞粒子效果,并且从接触点开始,我想创建5个不同方向的岩石物体。我该怎么做到这一点?问题是,我得到的联络点似乎不正确。发生碰撞时会产生碰撞粒子效果,但是岩石物体会在靠近接触点而不是接触点的其他点上创建。另外,如何在实例化之后将岩石物体向不同方向移动?

我的代码:

void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Enemy")
{
    ContactPoint2D contact = coll.contacts[0];

    GameObject rock1 =  Instantiate (rock, contact.point, transform.rotation) as GameObject;
    rock1.rigidbody2D.velocity = transform.up * 20;
    GameObject rock2 =  Instantiate (rock, newPos, transform.rotation) as GameObject;
    rock2.rigidbody2D.velocity = transform.right * 20;
    Destroy(coll.gameObject);
    Destroy (gameObject);
    Instantiate (explosion, transform.position, Quaternion.identity);           

}

}

1 个答案:

答案 0 :(得分:0)

第一个问题[岩石在接触点以外的其他地方产卵]

我建议你从子弹中移除一个箱式对撞机,因为箱式对撞机有一个平坦的表面,并会在碰撞时产生多个接触点。请改用圆形对撞机。 (对岩石没有限制)。

关于你的第二个问题[如何产生并向不同方向扔石头]

从碰撞中得到的接触点中有一个法线向量(contact.normal),它为您提供碰撞点的法线向量。

在你的岩石上应用一些随机旋转,并使用此法向量作为你想要移动岩石的方向。 Collision2D还包含relativeVelocity向量。你也可以将它添加到法线向量中(这可能会产生一些逼真的物理效果:))。

你实例化的岩石也不应该将isKinematic设置为true,否则AddForce和Velocity对岩石没有影响。