2016-06-05 3 views
0

Я использую скрипт DontGoThroughThings, чтобы исправить столкновения действительно быстро движущихся объектов. То, что я хочу сделать, это удалить треугольник попадания в сферу, когда мой быстрый движущийся объект попадает. Он работает на очень медленные объекты, однако, когда я снимаю быстрый объект, объект вызывает OnCollisionEnter, но я не могу найти треугольник, который он попал, и быстро перемещающийся объект прилипает к столкнутому предмету. Я думаю, это потому, что DontGoThroughThings устанавливает позицию объекта на столкнутый объект и направление теряется, поэтому мой луч не может найти правильный треугольник.DontGoThroughThings и OnCollisionEnter

enter image description here

Вот код на моей сфере:

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

Я нашел эту проблему. Мне нужно было переместить точку несколько единиц назад, а затем бросить raycast. Так оно и будет выглядеть:

colliderRay.Raycast(new Ray(collisionInfo.contacts[i].point - (collisionInfo.contacts[i].normal.normalized), collisionInfo.contacts[i].normal), out hit, 10.0f); 
Смежные вопросы