我有一个圆形对撞机2d的物体,以及一个带有对撞机2d的物体。我如何检测circlecollider何时击中盒子对撞机的顶部边缘。假设没有任何对象有任何旋转。我想在代码C#
中这样做答案 0 :(得分:3)
OnCollisionEnter会触发,如下所示:
void OnCollisionEnter(Collider collider)
{
foreach(CollisionPoint contact in collider.contacts)
{
//Do something
}
}
以上内容将为您提供碰撞的接触点列表,您可以通过该列表确定碰撞发生的位置。如果您只需要检测指定位置的碰撞,则可以使用另一种方法,您可以在立方体中放置一个不可见的子对象,并在您想要的位置放置一个碰撞器。
修改强>
既然你提到了光线投射,我可以想到有两种方法可以实现这些。第一种方法是从立方体向上发射它,但这只有1点射线发射的问题,这意味着可能会错过一些碰撞(取决于立方体和球体的大小)。
弹出的第二种方法是平行于立方体发射光线。这可能听起来有点不正统,我没有测试过,但从理论上说它应该可行。把它贴在你的立方体中:
void Update
{
Vector3 start = this.transform.position;
Vector3 end= this.transform.position;
//This attempts to place the start & end point just above the cube
//This of course assumes the cube isn't rolling around. If that's the case
//then these calculations get quite a bit more complicated
//Additionally the 0.01 might need adjusting if it's too high up off the cube
start.y += this.renderer.bounds.y/2 + 0.01f;
end.y += this.renderer.bounds.y/2 + 0.01f;
start.x -= this.renderer.bounds.x/2;
end.x += this.renderer.bounds.x/2;
Ray ray = new Ray(start, end);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, start.x-end.x) && hit.name == "mySphere")
{
//Theoretically, the sphere hit the top of the box!
}
}