检测两个游戏对象是否重叠/相交Unity

时间:2018-07-09 13:53:59

标签: c# unity3d

我有一个直截了当的问题,但是我缺乏统一的知识阻碍了我。

我在场景中以各种角度旋转了原始类型的游戏对象(例如,立方体/胶囊/球体)。它们已经实例化。

然后我将一个新的游戏对象基本类型添加到场景中,我想知道这个新的游戏对象是否与场景中的当前基本类型重叠/相交。

为此,我一直在使用gameobject1.GetComponent<Collider>.bounds.Intersects(gameobject2.GetComponent<Collider>.bounds)

但是这是行不通的,因为边界是一个边界框,因此即使游戏对象在视觉上没有直接接触原始类型的游戏对象之一,如果它在边界框内,它也会将其返回为true(即他们相交),这不是我想要的:

enter image description here

我确定还有另一种统一的方法,但是我不知道该怎么做!

任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

使用MeshCollider,而不是BoxCollider

void OnCollisionEnter(Collision collision)
{
    foreach (ContactPoint contact in collision.contacts)
    {
        Debug.DrawRay(contact.point, contact.normal, Color.white);
    }
}

enter image description here enter image description here enter image description here

答案 1 :(得分:0)

您可以改用MeshCollider(只要您的对象很简单),然后将MeshCollider IsTrigger属性设置为true。

然后在代码中可以执行以下操作:

void OnTriggerEnter(Collider col)
{
}

void OnCollisionEnter(Collision col)
{
}

任何物体进入对撞机时,都会调用上述功能,您可以在那里做所需的事情。

编辑:您的对象将需要添加刚体以使碰撞起作用