DontGoThroughThings 和 OnCollisionEnter

DontGoThroughThings and OnCollisionEnter

我正在使用 DontGoThroughThings 脚本修复快速移动物体的碰撞。我想要做的是在快速移动的物体撞击时移除球体内的撞击三角形。它适用于非常慢的物体,但是,当我拍摄一个快速物体时,该物体调用 OnCollisionEnter 但我找不到它击中的三角形并且快速移动的物体粘在碰撞的物体上。我想是因为 DontGoThroughThings 将对象位置设置为碰撞对象并且方向丢失,所以我的光线找不到合适的三角形。

这是我球体上的代码:

void OnCollisionEnter(Collision collisionInfo)
{
    int[] triangles = mesh.triangles;

    for (var i = 0; i < collisionInfo.contacts.Length; i++)
    {
        RaycastHit hit;
        colliderRay.Raycast(new Ray(collisionInfo.contacts[i].point, collisionInfo.contacts[i].normal), out hit, 10.0f);

        if (hit.collider != null && hit.triangleIndex != -1)
        {
            triangles = removeTriangle(hit.triangleIndex, triangles);
        }
    }

    mesh.triangles = triangles;
    meshCollider.sharedMesh = mesh;
}

private int[] removeTriangle(int triangle, int[] tris)
{
    for (var i = triangle * 3; i < tris.Length - 3; ++i)
    {
        if (tris[i] == -1) break;
        tris[i] = tris[i + 3];
    }
    return tris;
}

我找到问题了。我需要将点向后移动几个单位,然后进行光线投射。所以它看起来像:

    colliderRay.Raycast(new Ray(collisionInfo.contacts[i].point - (collisionInfo.contacts[i].normal.normalized), collisionInfo.contacts[i].normal), out hit, 10.0f);