【问题标题】:OnCollisionEnter2D incorrect contact point? - Unity2DOnCollisionEnter2D 接触点不正确? - Unity2D
【发布时间】:2015-03-11 09:40:05
【问题描述】:

我正在尝试向另一个敌方对象(rigidbody2d、kinematic、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);           

}

}

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多