타격(Hit) 이벤트
발사체가 파괴되기 위해서는, 마지막에 부딪히는 시점을 알아야 한다.
따라서 부딪히는 방식을 알기 위해 히트 이벤트에 대해 다루게 된다.
발사체는 UStaticMeshComponent이고, 해당 컴포넌트의 부모는 UPrimitiveComponent이다.
UPrimitiveComponent는 히트 이벤트 생성이 가능하고 여기서 OnComponentHit이라는 변수가 존재한다.
해당 변수는 구조체 타입이며, 구성은 다음과 같다.
그리고 이 OnComponentHit이라는 히트 이벤트 멀티캐스트 델리게이트라고도 한다.
멀티캐스트 델리게이트는 여러 개의 함수 바인딩이 가능하다.
또한 바인딩된 함수는 인보케이션 리스트라는 곳에 저장된다.
이 인보케이션 리스트가 히트 이벤트가 호출하라고 하면 호출되는 함수 목록이 된다.
해당 함수 목록에는 무슨 일이 생겼을 때 히트 이벤트나 멀티캐스트 델리게이트가 알려주게 된다.
예시로 발사체 메시가 무언가를 치면 델리게이트에 바인딩된 함수를 가진 모든 클래스에 브로드캐스트를 보내 알려주게 된다.
브로드캐스트가 전송되자마자 모든 바인딩된 함수는 브로드 캐스트에 응답하여 호출하게 된다.
바인딩을 하는 방법은 AddDynamic 함수를 통해 시행이 가능하다.
해당 함수는 인풋 매개 변수로 사용자 객체와 콜백 함수가 필요하다.
여기서 콜백 함수가 히트 이벤트의 인보케이션 리스트에 추가하게 된다.
이제 해당 콜백 함수를 구현해보자.
해당 콜백 함수는 히트 이벤트의 정확한 시그니쳐가 필요하여 인풋 매개 변수가 구체적이어야 한다.
그리고 바인딩되기 위해서는 UFUNCTION()으로 선언해줄 필요가 있다.
위와 같이 인풋 매개 변수로 부딪히는 일을 하는 컴포넌트, 충돌을 당하는 액터, 충돌 당하는 컴포넌트, 충돌시 임펄스 방향과 크기, 충돌에 대한 정보를 인풋 매개 변수로 주었다.
BeginPlay에서 해당 히트이벤트 바인딩 작업을 해주고, 콜백 함수에는 간단하게 로그를 통해 각 인풋 매개 변수의 값을 출력하도록 테스트해보았다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-27 (0) | 2024.04.08 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-26 (0) | 2024.04.08 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-24 (0) | 2024.04.08 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-23 (0) | 2024.04.06 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-22 (0) | 2024.04.06 |