게임엔진/언리얼 엔진 5

[언리얼 엔진5][기초 2장] 충돌 감지

우향우@ 2023. 4. 23. 18:39

개요

언리얼 엔진에서 콜리전속성을 가진 컴포넌트끼리는 충돌이 일어날 수 있다. 여기서 각 콜리전 설정에 따라 해당 콜리전은 각 채널의 콜리전들에 대해서 block되거나 overlap되거나 ignore될 수 있다. block은 서로 막히며 충돌 이벤트가 발생한다. overlap은 막히진않지만 겹침 이벤트가 발생한다. ignore은 무시다.

두 콜리전이 충돌하면 서로가 상대 채널에 대해 처리되는 설정 중 더 낮은 처리가 일어난다.

ex)block <-> block => block

block <-> overlap  => overlap

overlap <-> ignore => ignore

 

충돌 이벤트

엑터

엑터의 notifyHit멤버 함수를 오버라이드하면 엑터가 가진 컴포넌트의 콜리전이 충돌 시 해당 정보들과 함께 해당 함수가 호출된다.

컴포넌트

엑터가 아닌 각 컴포넌트별로 충돌을 처리하고 싶다면 해당 컴포넌트의 OnComponentHit 멤버 변수의 addDynamic 함수로 이벤트 함수를 등록해주면된다. addDynamic의 매개변수는 해당 함수의 소유 객체와 함수포인터를 받으며 해당 객체의 함수가 등록된다. 이 처리는 컴포넌트 스스로 생성자에서 할수도 있고 외부, 대표적으로 컴포넌트를 소유한 엑터에서 초기화해줄 수 도 있다.

 

 

오버랩 이벤트

엑터

엑터의 notifyBeginOverlap함수를 오버라이드하면 엑터의 컴포넌트의 콜리전이 오버렙 시작시 해당 정보들과 함께 함수가 호출된다. notifyEndOverlap은 끝날때 호출된다.

컴포넌트

해당 컴포넌트의 OnComponenetBeginOverlap과 OnComponenetEndOverlap을 채우면된다.

 

트레이스

언리얼의 트레이스는 레이캐스트, 기하캐스트를 말한다. 언리얼에서 콜리전 채널은 트레이스 채널, 콜리전 채널 두개로 나뉘는데 트레이스를 쏠때 트레이스는 트레이스 채널중 한 채널을 가지게 된다. 이때 해당 트레이스 채널에 에디터에서 설정해준 설정대로 충돌이 일어나 감지하게된다.

라인 트레이스(레이 캐스트)

GetWorld함수로 얻을 수 있는 월드객체에 해당 함수들을 시작 위치, 끝 위치, 사용할 트레이스 채널 등을 넘겨주며 호출하면 다음 결과들을 리턴해준다.

LineTraceSingleByChannel

첫 충돌(blcok) 결과를 리턴레퍼런스에 반환

LineTraceMultiByChannel

오버랩 결과들과 첫 충돌(block) 결과를 정렬하여 배열로 리턴 레퍼런스에 반환

 

이외에도 기하캐스트등의 다양한 트레이스 함수가 있다.