当2个对象重叠时,GetContacts仅返回1个ContactPoint2D

时间:2019-01-17 09:04:08

标签: c# unity3d

我使2个游戏对象彼此接近。这些对象具有“刚体2D”和“碰撞体2D”。碰撞时,我想让接触点位于对撞机的外部。这些可以达到8分。现在,我的对象正在碰撞,但是我只收到一个接触点,这似乎是接触点或重叠区域的平均值。 我如何获得每一分?

private ContactPoint2D[] contacts = new ContactPoint2D[10];

void OnCollisionStay2D(Collision2D collision)
{
    collision.collider.GetContacts(contacts);


    foreach (ContactPoint2D contact in contacts)
    {
        Vector2 hitPoint = contact.point;

        if (hitPoint != testVector)
        {
            TestMarker.transform.position = new Vector3(hitPoint.x, hitPoint.y, -5.0f);
        }

        Debug.Log(hitPoint.ToString());
    };
}

因此,如下面的图像所示,我想跟踪两个对象的接触点。绿色方块从两个对象第一次相互碰撞的点开始,然后像平均值或sth一样移动到中心。 这是正常行为吗?

The two Objects

我该如何获取所有联系点?

1 个答案:

答案 0 :(得分:0)

从文档中

  

您应该传递一个足够大的数组,以包含您要返回的所有联系人

因此,您需要检查数组大小是否合适。

int count = collision.collider.GetContacts(contacts);
if(count > contacts.Length)
{
    Array.Resize(ref contacts, count);
    collision.collider.GetContacts(contacts);
}