0

我正在尝试将子弹(rigidbody2d,boxcollider2d)射向另一个敌方物体(rigidbody2d,kinematic,circlecollider2d)。我想要这两者之间的碰撞点。当它们发生碰撞时,我想要一个碰撞粒子效果,并且从接触点开始,我想要创建 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);           

}

}

4

1 回答 1

0

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

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

对于您的第二个问题[如何生成并朝不同方向投掷石块]

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

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

此外,您实例化的岩石不应isKinematic设置为 true,否则 AddForce 和 Velocity 将不会对岩石产生影响。

于 2015-06-19T01:50:16.600 回答