2017-04-15 3 views
0
void OnMouseDown() 
    { 
     if (Input.GetMouseButtonDown(0)) 
     { 
      RaycastHit hit; 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      if (Physics.Raycast(ray, out hit, 1000.0f)) 
      { 
       int[] triangles = transform.GetComponent<MeshFilter>().mesh.triangles; 
       if (hit.triangleIndex != -1 && (hit.triangleIndex * 3) < triangles.Length) 
    } 

Wenn ich auf eines der Dreiecke auf dem Netz klicke, sind es zwei, die zu der Funktion kommen, die einen Haltepunkt benutzt, aber ich sehe, daß hit.triangleIndex -1 ist.Warum OnMouseDown die Funktion hit.triangleIndex return -1?

In der Array-Dreiecke ich habe 6 Artikel:

index 0 = 2 
index 1 = 1 
index 2 = 0 
index 3 = 2 
index 4 = 3 
index 5 = 1 

Antwort

2

Dreieck-Index ist nur gültig, wenn der Teilchenbeschleuniger, der getroffen wurde ein MeshCollider ist.

RaycastHit.triangleIndex

+0

Recht, aber das ist das Problem, das ich vorher hatte. Bis jetzt habe ich BoxCollider benutzt. Und ich habe es jetzt zu MeshCollider geändert: gameObject.AddComponent (); Das Problem ist jetzt, dass wenn ich mit der Maus auf das Mesh klicke, es nie in die OnMouseDown Funktion kommt, nur wenn ich den MeshCollider Property Name: Convex überprüfe. Wenn ich es überprüfe, setze es auf wahr, es wird zu OnMouseDown gelangen. Aber wenn ich das Spiel nochmal durchführe, muss ich den Convex auf false setzen. Jedes Mal, wenn ich die Convex-Eigenschaft auf "true" oder "false" ändern muss, wird es sonst nicht in "OnMouseDown" gelangen. Irgendwelche Ideen warum? –

+0

@DanielHalfoni einige googeln offenbart [this] (http://answers.unity3d.com/answers/996290/view.html) gem. – Iggy

Verwandte Themen