Physics.BoxCastAll 을 사용하다보면(또는 유사 다른 cast) point 값이 0,0,0 으로
나오거나 또는 normal 값이 이상한 형태로 나오는 것을 볼 수 있는데 이 이유에 대해 살펴봅시다
Physics.BoxCastAll
Parameters
center | Center of the box. |
halfExtents | Half the size of the box in each dimension. |
direction | The direction in which to cast the box. |
orientation | Rotation of the box. |
maxDistance | The max length of the cast. |
layermask | A Layer mask that is used to selectively ignore colliders when casting a capsule. |
queryTriggerInteraction | Specifies whether this query should hit Triggers. |
Returns
RaycastHit[] All colliders that were hit.
Description
Like Physics.BoxCast, but returns all hits.
Notes: For colliders that overlap the box at the start of the sweep, RaycastHit.normal is set opposite to the direction of the sweep, RaycastHit.distance is set to zero, and the zero vector gets returned in RaycastHit.point. You might want to check whether this is the case in your particular query and perform additional queries to refine the result.
박스 단위로 충돌을 검사하는 함수입니다
유효한 충돌 범위는
(대상 오브젝트의 center+ halfExtents 위치 기준=)maxDistance > 충돌 가능 범위 > center+ halfExtents
.99 그이하 미소 범위[e] 에 대해선 소수점 오차로 인해 충돌 판별 되는 양상을 띕니다
가정
Cast 보낼 오브젝트 위치 정보
pos : 0,0,-30
scale : 10,10,10
대상 오브젝트 정보 [1]
pos : 0,0,-5
scale : 10,10,10
maxDistance 15
그외 정보는 일반적으로 unit 한 정보라 가정합니다(normal 은 당연히 시작 오브젝트에서 대상을 바라본다 가정 합니다)
위의 경우 충돌이 되지만
대상 오브젝트가 [2]
pos : 0,0,-4.5
scale : 10,10,10
인 경우에는 충돌되지 않습니다
계산
충돌 시작점 + half
center+ halfExtents 의 위치에서부터 maxDistance 이 계산 됨으로
-30 + 15 + 5 = -10
즉 대상체의 충돌 검출 시작점은 -10 (충돌 가능 범위 기준) 이내 범위어야합니다
그리하여 (대상 오브젝트가 [2])
-4.5 - 5 = -9.5 의 범위에선 충돌되지 않지만
그리하여 (대상 오브젝트가 [1])
-5.0 - 5 = -10 의 범위에선 충돌 검출을 하게 됩니다
만약 충돌될 대상 오브젝트가 충돌 시작위치의 halfExtents 을 침범하게 된다면?
주의
은 출돌검사를 시작하는 center 위치에서 halfExtents 까지의 범위 안에 충돌체가 들어왔고 이 충돌체와 충돌 하게 되면 pint 값이 0 이 되며
normal 값은 sweep 의 방향에 반대되는 (- 가 곱해진) normal 을 만듭니다
ref : https://docs.unity3d.com/ScriptReference/Physics.BoxCastAll.html
'게임엔진(GameEngine) > Unity3D' 카테고리의 다른 글
스테이트와 Transition Interruption Source (0) | 2019.02.15 |
---|---|
TextMesh Pro & Unity 2018.1 (Migration to Package Manager releases) (0) | 2019.01.25 |
unity3D Help Shortcut setting + visual studio (0) | 2018.10.13 |
유니티 UI 버튼 PointerDown, Up 스크립트로 받아오기 (0) | 2018.10.12 |
how to make a transparent color with CreatePrimitive (0) | 2018.10.08 |