
# Hit Event란?
히트 이벤트란, 물리 시뮬레이션 중인 서로 다른 두 객체가 블로킹(Blocking) 했을 때 발생하는 특정 사
BeginPlay에서 충돌 시 어떠한 함수를 호출할 지 선택하고, 실제 플레이 중에 충돌이 발생하면
자동으로 그 함수가 호출되는 것이다.
언리얼에서 히트 이벤트를 사용하기 위해서 '델리게이트' 라는 개념을 이해해야 한다.
# 델리게이트(Delegate)
1. C++ 객체 지향 방식의 함수 포인터 시스템
2. 사건(Event)이 발생했을 때 "어떤 객체의 어떤 함수를 호출할 것인가"를 정의하고 실행하는 시스템
비유하면
히트 이벤트는 초인종이고, 델리게이트는 초인종에 연결되어 주인에게 알림을 보내는 배선
근데 그 알림을 "여러 개" 보낼 수 있다.
# 히트 이벤트 호출 조건
1. 프리미티브 컴포넌트(Primitive Component)의 존재
- 프리미티브 컴포넌트 : USceneComponent(크기, 위치, 회전) + 물리 기능 추가
- 대표적으로 스태틱 메시 컴포넌트, 캡슐 컴포넌트, 스피어 컴포넌트, 박스 컴포넌트 등

2. 콜리전 설정
- 프리미티브 컴포넌트 콜리전 설정에서 "시뮬레이션 히트 이벤트"가 true로 설정되어 있어야 한다.
- 두 컴포넌트의 콜리전의 관계가 "Block"으로 설정되어 있어야 한다.

3. 무브먼트
- 모빌리티가 "무버블"이어야 능동적으로 히트 이벤트를 발생시킬 수 있다.
- "스태틱"도 히트 이벤트가 발생할 수 있지만, 다른 객체에 의해 "맞을" 때 발생한다.
# 델리게이트 동작 방식
1. 델리게이트는 C++ 함수 포인터를 더욱 안전하고 유연하게 사용할 수 있도록 언리얼 엔진이 고안한 시스템
2. 그 목적인 송신자(Sender)와 수신자(Receiver)의 결합도를 낮추는 것
- 히트 이벤트를 발생시키는 객체는 이벤트를 처리할 함수가 무엇인지 알 필요가 없다.
3. 언리얼의 델리게이트는 크게 두 종류로 나뉜다.
- 싱글 캐스트(Single Cast) : 단 하나의 함수만 바인딩
- 멀티 캐스트(Multi Cast) : 여러 개의 함수를 바인딩하여 하나의 리스트(Invocation List)에 보관
4. 히트 이벤트는 멀티 캐스트 델리게이트
# OnComponentHit
1. 다이나믹 멀티 캐스트 델리게이트(Dynamic Multi-cast Delegate)
2. UFUNCTION() 매크로가 붙은 함수만 바인딩 할 수 있다.
3. AddDynamic() 함수를 통해 여러 개의 함수를 등록할 수 있다.
4. 히트 이벤트가 발생하면 델리게이트 Broadcast() 함수를 호출하면서 등록된 모든 함수가 순서대로 호출된다.
# 이벤트 함수 정의

1. UFUNCION() 매크로
2. UPrimitiveComponent* HitComp : 충돌한 컴포넌트
3. AActor* Other : 총돌된 대상
4. UPrimitiveComponent* OtherComp : 충돌된 컴포넌트
5. FVector NormalImpulse : 날아갈 방향과 크기
6. const FHitResult& Hit : 충돌 관련 정보가 담긴 구조체 (충돌 위치 등의 정보를 담고 있음)
# 이벤트 함수 바인딩

1. 생성자보다는 이후에 (BeginPlay)에서
2. 프리미티브 컴포넌트의 OnComponentHit 멤버에서 AddDynamic함수 호출
3. 첫 번째 인자는 this
4. 두 번째 인자는 바인딩할 함수 주소
'Unreal Engine > 기능 구현' 카테고리의 다른 글
| [Unreal Engine 5] 나를 스폰한 대상 찾기 (0) | 2025.07.04 |
|---|---|
| [Unreal Engine 5] 데미지 적용(On Take Any Damage) (0) | 2025.07.04 |
| [Unreal Engine 5] Projectile Movement Component (0) | 2025.07.04 |
| [Unreal Engine 5] Timer (0) | 2025.06.30 |
| [Unreal Engine 5] 월드 내 다른 액터가 Pawn 찾는 법 (0) | 2025.06.30 |
