我正在使用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;
}
答案 0 :(得分:0)
我发现了这个问题。我需要将点数移回几个单位然后投射光线投射。所以它看起来像:
colliderRay.Raycast(new Ray(collisionInfo.contacts[i].point - (collisionInfo.contacts[i].normal.normalized), collisionInfo.contacts[i].normal), out hit, 10.0f);