2014-02-22 1 views
0

저는 평면을 가지고 있습니다. (보통) 여러 개의 메시가 있습니다. 이제 새로운 scene 인 gameObject - Cylinder를 추가했습니다. 실린더가 비행기와 충돌 할 때, 나는 실린더 안에 나타나는 비행기의 모든 삼각형, 을 감지해야합니다. Unity3D API로 가능합니까?
"Colliders as Triggers"튜토리얼을 보았습니다.하지만 충돌하는 객체에서 Rigidbody 구성 요소가없는 Trigger 이벤트를 처리 할 수 ​​있습니까? 몇 가지 이유로 나는 비행기와 실린더에서 리지드 바디를 가질 수 없습니다.
Unity3D : 다른 게임 오브젝트와 교차하는 메시의 삼각형을 검출합니다.

답변

2

실린더에 구형 캐스트를 추가하고 개체가 입력 될 때 (상자 충돌기, 레이 캐스트 등) 어떤 이벤트가 발생하면이 작업을 수행 할 수 있습니다. 비행기의 삼각형을 감지하기 위해 (어떤 종류의 메쉬 콜리더가 있다고 가정) 실린더의 구형 캐스팅 내의 모든 히트 오브젝트 목록을 가져올 수 있으며 완전한 메쉬 삼각형을 구성하는 각각의 오브젝트를 순환 할 수 있습니다. 다음 과정을 보여주기 위해 몇 가지 코드입니다 : "IsMeshColliding()"라인이 발생하는 이벤트의 일종을 가지고 자신의 논리에 추가 할 수 있습니다에서

void GetMeshTriangle(RaycastHit meshHitPoint, MeshCollider meshObject){ 
Mesh mesh = meshObject.sharedMesh; 
Vector3[] vertices = mesh.vertices; 
int[] triangles = mesh.triangles; 
int counter = 0; 
for(int n = 0; n <= (worldObjectsHit.Length * 3); n++){ 
    if (counter == 2){ 
     Transform hitTransform = meshHitPoint.collider.transform; 
     try{ 
      Vector3 pointOne = vertices[triangles[meshHitPoint.triangleIndex * 3 + n]]; 
      Vector3 pointTwo = vertices[triangles[meshHitPoint.triangleIndex * 3 + (n-1)]]; 
      Vector3 pointThree = vertices[triangles[meshHitPoint.triangleIndex * 3 + (n-2)]]; 
      pointOne = hitTransform.TransformPoint(pointOne); 
      pointTwo = hitTransform.TransformPoint(pointTwo); 
      pointThree = hitTransform.TransformPoint(pointThree); 
      Vector3 meshObjectCenter = new Vector3(((pointOne.x + pointTwo.x + pointThree.x)/3), 
              ((pointOne.y + pointTwo.y + pointThree.y)/3) , 
              ((pointOne.z + pointTwo.z + pointThree.z)/3)); 
      Debug.DrawLine(p0, p1); 
      Debug.DrawLine(p1, p2); 
      Debug.DrawLine(p2, p0); 
      IsMeshColliding(meshHitPoint, meshObjectCenter); 
      } catch (System.IndexOutOfRangeException ex){ 
       break; 
      } 
      counter = 0; 
     } else { 
     counter++; 
     } 
    } 
} 

.

+0

** SphereCast ** tip의 경우 thnx입니다. (** SphereCast ** 또는 ** OverlapSphere ** 메소드를 사용하여) 실린더와 겹치도록 모든 메쉬 삼각형을 검사합니다. – lewis