我正在尝试向另一个敌人物体(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);
}
}
答案 0 :(得分:0)
第一个问题[岩石在接触点以外的其他地方产卵]
我建议你从子弹中移除一个箱式对撞机,因为箱式对撞机有一个平坦的表面,并会在碰撞时产生多个接触点。请改用圆形对撞机。 (对岩石没有限制)。
关于你的第二个问题[如何产生并向不同方向扔石头]
从碰撞中得到的接触点中有一个法线向量(contact.normal
),它为您提供碰撞点的法线向量。
在你的岩石上应用一些随机旋转,并使用此法向量作为你想要移动岩石的方向。 Collision2D还包含relativeVelocity向量。你也可以将它添加到法线向量中(这可能会产生一些逼真的物理效果:))。
你实例化的岩石也不应该将isKinematic
设置为true,否则AddForce和Velocity对岩石没有影响。