2017-04-15 8 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) 
    } 

メッシュの三角形のうちの1つをクリックすると、ブレークポイントを使用して関数に到達する2つがありますが、hit.triangleIndexは-1です。私は6つの項目持つ配列の三角形でなぜOnMouseDown関数がhit.triangleIndexから-1を返しますか?

:見舞われたコライダーが MeshColliderある場合

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

答えて

2

トライアングルインデックスにのみ有効です。

RaycastHit.triangleIndex

+0

右が、それは私が前に持っていた問題です。これまではBoxColliderを使っていました。そして私は今MeshColliderに変更しました:gameObject.AddComponent ();問題は今、私がMeshColliderのプロパティ名を確認した場合にのみ、OnMouseDown関数に入ることがない、メッシュ上でマウスをクリックすると、Convexです。私がそれをtrueに設定することをチェックすると、OnMouseDownに到達します。しかし、ゲームをもう一度実行すると、私はConvexをfalseに設定する必要があります。 Convexプロパティをtrueまたはfalseに変更する必要があるたびに、OnMouseDownに到達しません。なぜどんなアイデア? –

+0

@DanielHalfoniいくつかのグーグルが[this](http://answers.unity3d.com/answers/996290/view.html)の宝石を明らかにする。 – Iggy

関連する問題