Unity의 충돌시 이벤트는 충돌이 발생한 충돌에 대한 정보를 제공 하는 충돌 객체를 제공합니다 ( 적중 법선 이있는 ContactPoint 목록 포함 ).
그러나 당신이 얻지 못하는 것은 충돌하는 충돌체의 표면 법선입니다. 설명 할 스크린 샷이 있습니다. 빨간색 선은에서 ContactPoint.normal
오고 파란색 선은에서옵니다 RaycastHit.normal
.
이것이 단순화 된 API를 제공하기 위해 정보를 숨기는 Unity 인스턴스입니까? 아니면 표준 3D 실시간 충돌 탐지 기술이이 정보를 수집하지 않습니까?
그리고 질문의 두 번째 부분에서 충돌의 표면 법선을 얻는 확실한 방법은 무엇입니까?
레이 캐스팅은 표면 노멀을 제공한다는 것을 알고 있지만 모든 시나리오 에서이 작업을 수행하려면 여러 레이 캐스트를 수행해야합니다 (접촉점 / 일반 조합이 첫 번째 캐스팅에서 충돌자를 놓칠 수도 있습니다. 최상의 결과를 얻으려면 접점의 법선).
내 현재 방법 :
Collision.contacts[0].point
적중률을 따라 백업부정 된 히트 다운 레이 캐스트 정상에
float.MaxValue
에,Collision.collider
실패하면 음이 아닌 법선으로 1 단계와 2 단계를 반복하십시오.
실패하면 1 ~ 3 단계를 시도하십시오.
Collision.contacts[1]
성공할 때까지 또는 모든 접점이 소진 될 때까지 4를 반복하십시오.
포기하고 돌아가십시오
Vector3.zero
.
이것은 모든 것을 잡는 것처럼 보이지만 모든 광선 방송은 나를 편하게 만듭니다. 그리고 이것이 충분한 경우에 효과가 있는지 테스트하는 방법을 모르겠습니다. 더 좋은 방법이 있습니까?
편집 이것이 실제로 3D 충돌과 똑같은 방식이라면, 일반적인 경우 왜 Unity에 특정한 것만큼이나 환영받는 이유에 대한 개요입니다.