2016-05-26 7 views
1

Ich schrieb Netzgenerator für MeshCollider. Aber manchmal, wenn ich die konvexe Eigenschaft auf ture setze, traten einige Fehler auf, um das Protokoll zu erscheinen.Einheit3d. So finden Sie falsches konvexes Netz zu finden

Zum Beispiel habe ich jetzt ein Mesh mit 44 Ecken und diese Fehler:

CreateTrianglesFromPolygons: konvexe Hülle ein Polygon mit weniger als 3 Ecken hat!

oder

konvexe Hülle init failed! Versuchen Sie das PxConvexFlag :: EINFLATE_CONVEX-Flag zu verwenden.

oder etwas anderes ...

Alles, was ich wollen, ist, diesen Fehler zu erkennen und zu behandeln. Aber try catch funktionieren nicht:

try 
{ 
    collider.convex = true; 
    UnityEngine.Debug.Log("Success! TrCount: " + collider.sharedMesh.triangles.Length.ToString()); // "Success! TrCount: 84" 
} 
catch 
{ 
    UnityEngine.Debug.Log("Error occur"); // never appear 
} 

Vielleicht gibt es einige Regeln, um es zu erkennen, bevor konvex auf true setzen.

Vielen Dank für jede Hilfe).

+0

Warum verwenden Sie einen ** Mesh Collider **? Sie verwenden nie Netzkollider. – Fattie

+0

Das gleiche Problem, und unter Antwortvorschläge ähnlich funktionieren nicht für mich (Dreiecke. Länge ist über 100). Haben Sie dafür schon eine Lösung gefunden? –

+0

@PhilippLenssen, habe ich Mesh-Cutter verwendet, um Mesh zu schneiden und manchmal habe ich alle Scheitelpunkte in einer Ebene. Also fügte ich eine Überprüfung hinzu, um die Entfernung jedes Scheitelpunktes zur Schnittebene zu überprüfen, und wenn die maximale Entfernung kleiner als 0,001f ist, lehnte ich dieses Netz ab. Es löst das Problem –

Antwort

1

Sie haben vergessen catch(ExceptionType)

try 
{ 
    collider.convex = true; 
    UnityEngine.Debug.Log("Success!"); 
} 
catch(Exception e) 
{ 
    UnityEngine.Debug.Log("Error occur: " + e.Message); 
} 

Fügen using System; an der Spitze.

EDIT:

Die Fehlermeldung ist NICHT eine Ausnahme, so dass die Methode unten sollte Ihr Problem lösen. Denken Sie daran, dass konvex das Dreieck < 255 benötigt, um zu funktionieren. Der Code unten stellt sicher, dass Ihre Trigs zwischen und sind.

if (generatedMesh.triangles.Length >= 3 && generatedMesh.triangles.Length < 255) 
{ 
    collider.convex = true; 
    UnityEngine.Debug.Log("Success!"); 
}else 
{ 
    UnityEngine.Debug.Log("Error occur: " + e.Message); 
} 
+0

Nein. Funktioniert nicht. Die 'collider.convex = true;' werfen keine Ausnahme! Aber ich möchte nicht, wenn Fehler auftreten –

+0

@StasBZ Meine Antwort aktualisiert, nachdem ich festgestellt habe, dass dies keine Ausnahme ist. – Programmer

+0

Nicht arbeiten. sharedMesh.triangles.Length == 84. Siehe meine aktualisierte Frage. –