Unreal Engine/기능 구현 / / 2025. 7. 4. 18:49

[Unreal Engine 5] Hit Event와 델리게이트(Delegate)

반응형

 

# 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. 두 번째 인자는 바인딩할 함수 주소

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유