[UE4] Collision -1 : Actor Overlap
Character의 Spawn과 이동을 모두 구현하였으니 다음으로 Actor의 Overlap 충돌을 구현해보았다.
📦 Test Box Collision 만들기
먼저, Overlap 충돌을 테스트할 Box Collision을 갖는 액터를 생성해주었다.
![]() |
![]() |
USceneComponent 를 Root 컴포넌트로 갖고, 자식 컴포넌트로 Box Collision과 Text Render 컴포넌트를 추가해주었다.
이때 Box의 기본 HiddenInGame 설정을 false로하여 테스트가 용이하게끔 뷰포트에 나타내었다.
Scale값은 FVector(3) 로 전달하였는데, 이렇게 하나의 벡터값만 전달하면 X, Y, Z 값이 전부 3으로 동일하게 초기화된다.
CreateTextRender() 함수는 Global.cpp 파일에 선언해놓은 매크로 함수이다.
TextRender를 기본적으로 초기화하는 내용인데, 자주 사용되는 함수이기 때문에 매크로로 설정해두었다.
원래 매크로는 전부 한줄에 입력해야하는데 함수는 여러줄로 나누어지기 때문에 역슬래시 \ 를 입력하여 한 줄로 처리하게끔 명령어를 사용하였다.
🚶♂️ Actor Overlap
콜리전을 적용시키기 위해 Actor Overlap 기능을 구현할 클래스를 생성하였다.
C++클래스에서 Actor Overlap 기능을 구현할 때는 이벤트로 만드는데 이를 델리게이션이라고 한다.
델리게이션에 의해 Call 되는 것은 전부 직렬화 되어야 한다.
따라서 Begin Overlap 함수와 End Overlap 함수를 전부 UFUNCTION() 으로 직렬화하였다.
이후 .cpp 파일에서 Overlap 함수명인 "OnActorBeginOverlap"을 입력한 뒤, F12를 누르면 함수의 정의를 확인할 수 있다.
앞에 선언되어 있는 자료형이 델리게이션 자료형이다. 이를 해당 문서의 가장 위에서부터 찾기를 하면 델리게이션의 자료형이 어떻게 정의되어있는지를 확인할 수 있다.
OnBeginOverlap은 델리게이션의 종류 중에 DYNAMIC_MULTICAST_SPARSE 라는 종류이다.
DYNAMIC이 붙은 델리게이트는 추후 블루프린트에 공개될 델리게이트를 의마한다. DYNAMIC 델리게이트는 이벤트를 사용할 때 반드시 매개변수의 타입과 변수명을 일치시켜주어야 한다.
OnActorBeginOverlap 매개변수 뒤에서부터가 실제로 델리게이트가 받을 실제 파라미터이므로, 뒤에 존재하는 OverlappedActor와 OtherActor를 복사하여 헤더파일에 함수를 제작하였다.
맨 앞은 자료형(FActorBeginOverlapSignature)을 의미하고 그다음은 소속될 클래스(AActor), 그다음은 델리게이션 명(OnActorBeginOverlap) 그 다음부터가 매개변수이다!
정의의 뒤를 보면 TwoParams 라고 되어있으니 총 매개변수가 두개라는 의미로 해석할 수 있다.
(이후, 자료형 뒤에 콤마를 전부 지워주어야 한다)
델리게이션의 종류에 대해선 다음 게시글에서 자세히 설명하였다.
이벤트를 사용할 때는 AddDynamic 이라는 매크로 함수를 이용하여 소유객체, 함수의 주소를 차례로 매개변수로 전달한다.
이는 OnActorBeginOverlap이나 EndOverlap이 호출되면 등록한 함수가 자동으로 호출되게끔 작동한다.
BeginOverlap의 매개변수를 찾은것과 동일한 방식으로 EndOverlap의 함수도 매개변수를 찾아 작성해주었다.
각각의 Overlap 함수가 호출될 때 문자열을 출력하여 함수가 호출됨을 확인하였다.
그 결과, 성공적으로 Actor Overlap 기능이 작동되었다.