Я использую скрипт DontGoThroughThings, чтобы исправить столкновения действительно быстро движущихся объектов. То, что я хочу сделать, это удалить треугольник попадания в сферу, когда мой быстрый движущийся объект попадает. Он работает на очень медленные объекты, однако, когда я снимаю быстрый объект, объект вызывает OnCollisionEnter, но я не могу найти треугольник, который он попал, и быстро перемещающийся объект прилипает к столкнутому предмету. Я думаю, это потому, что DontGoThroughThings устанавливает позицию объекта на столкнутый объект и направление теряется, поэтому мой луч не может найти правильный треугольник.DontGoThroughThings и OnCollisionEnter
Вот код на моей сфере:
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;
}