[Unity] Physics.OverlapCapsule 함수 사용법
충돌범위 안에 있는 모든 충돌체를 가져와 참조 하고 싶다, 충돌범위안 모든 콜리더가 잇는 오브젝트를 알고 싶다
그러면 Physics.OverlapXXX 함수들을 사용하면 되는데요 .
Overlap함수 종류로는, OverlapBox , OverlapSphere , OverlapCapsule 가 있습니다.
이중에서 OverlapCapsule 함수 사용법을 알아보겟습니다 .
OverlapCapsule 함수 정의를 찾아보면 아래 와같습니다
----------------------------------------------------------------------------------------------------------------------------------
public static Collider [] OverlapCapsule ( Vector3 point0 , Vector3 point1 , float radius , int layerMask = AllLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
매개 변수
point0 | start캡슐 의 구의 중심 . |
point1 | end캡슐 의 구의 중심 . |
radius | 캡슐의 반경입니다. |
layerMask | 레이어 마스크 캡슐을 전송할 때 선택적 colliders을 무시하는데 사용된다. |
queryTriggerInteraction | 이 쿼리가 트리거에 도달해야하는지 여부를 지정합니다. |
----------------------------------------------------------------------------------------------------------------------------------
OverlapCapsule 함수에 들어가는 매개변수중에서 point0, point1 두 인자가 어떻게 값을 넣어야하는지 궁금햇습니다.
구글링해도 딱히 사용법도 안올라와서 제가 해봣습니다.
start캡슐 의 구의 중심 ? end캡슐 의 구의 중심? 무슨 말인가 했엇죠
end캡슐 의 구의 중심 / start캡슐 의 구의 중심 . 아래 사진과같은 의미입니다.
사진에 명칭을 달리햇지만 (Pos1, Pos2)
결론적의미는 캡슐의 맨위쪽 위치와 맨아래쪽 위치를 말하는겁니다.
아래는 OverlapCapsule 함수 사용법 예시 입니다.
void Update()
{
//반경
float radius = 5f;
//캡슐의 맨아래 위치
Vector3 pos1 = new Vector3(Tr.position.x, Tr.position.y-ConstHeight, Tr.position.z);
//캡슐의 맨위 위치
Vector3 pos2 = new Vector3(Tr.position.x, Tr.position.y + ConstHeight, Tr.position.z);
Collider[] colls = Physics.OverlapCapsule(pos2, pos1, radius);
for (int i = 0; i < colls.Length; i++)
{
_player = colls[i].GetComponent<Player_Script>();
if(_player != null)
{
//...
}
}
}
ConstHeight 변수는 임의지정한 높이 값입니다. 정해준 값에 따라 캡슐의 높이가 설정됩니다.
* 추가적으로 OverlapCapsuleNonAlloc 함수 사용법도 위와 동일합니다 .
OverlapCapsuleNonAlloc는 할당한 충돌체들을 반환하지않고 충돌한 갯수를 반환합니다. 그러므로 OverlapCapsule 사용할때보다 메모리 누적이 덜되기 때문에 게임부하에 덜주게 됩니다. 반대로 OverlapCapsule는 반환되는 충돌체들을이메모리할당하기 때문에 메모리 누적이 발생합니다.
이상 Physics.OverlapCapsule 함수 사용법 이었습니다.