0. 서문
C++ 함수의 동작 중 Blueprint의 이벤트를 발생시키는 방법을 찾는 과정에서 Delegate와 UFUNCTION을 사용하여 C++과 Blueprint를 연결하는 방법을 발견했습니다.
특히, C++에서 'BlueprintNativeEvent'와 'BlueprintImplementableEvent'를 사용하는 과정을 정리해 보았습니다.
1. 함수 생성
1.1. 블루프린트 구현가능 이벤트 생성 (BlueprintImplementableEvent)
1.1.1. 함수 생성 방법
public:
UFUNCTION(BlueprintImplementableEvent)
void AttackDone();
해당 방법의 경우, 함수의 구현 없이 활용한다.
1.1.2. Blueprint 활용 방법
Event 혹은 Function 동작이 필요한 경우 호출을 통해 활용이 가능하다.
- 예시: Attack Function 동작 중간, AttackDone() 함수 동작이 필요한 경우
void Attack()
{
// ... 코드 생략
UE_LOG(LogTemp, Display, TEXT("AttackDone Start!"));
AttackDone();
UE_LOG(LogTemp, Display, TEXT("AttackDone Finish!"));
}
1.1.2.1. 단순 호출
1.1.2.2. 호출 간 Async 동작이 포함되는 경우
1.1.3. 오류 발생 경우
만일, 다음과 같이 함수 내부를 구현하는 경우, 오류가 발생한다.
void APlayerBase::AttackDone()
{
UE_LOG(LogTemp, Warning, TEXT("AttackDone Event!"));
}
1.2. 블루프린트 네이티브 이벤트 생성 (BlueprintNativeEvent)
1.2.1. 함수 생성 방법
public:
UFUNCTION(BlueprintNativeEvent)
void AttackDone();
virtual void AttackDone_Implementation(); // 해당 코드의 유무와 무관하게 컴파일 및 동작 가능
void AttackDone_Implementation()
{
UE_LOG(LogTemp, Warning, TEXT("AttackDone Implementation Event!"));
}
함수의 구현이 필요한 경우, '_Implementation'을 함수 끝에 추가하는 경우 사용이 가능하다.
이때, 'virtual void AttackDone_Implementation()' 선언이 header에서 생략된 경우에도 동일하게 동작한다.
1.2.2. Blueprint 활용 방법
- 예시: Attack Function 동작 간, AttackDone() 함수 호출
void Attack()
{
// ... 코드 생략
UE_LOG(LogTemp, Display, TEXT("AttackDone Start!"));
AttackDone();
UE_LOG(LogTemp, Display, TEXT("AttackDone Finish!"));
}
1.2.2.1. Override가 없는 경우
1.2.2.2. Override(Event 생성)를 적용한 경우
1.2.2.3. Override(Event 생성) 후, 부모 클래스의 Attack Done을 호출 한 경우
2. 참고자료
https://forums.unrealengine.com/t/i-want-to-add-component-event-in-c/673416
https://forums.unrealengine.com/t/how-do-i-create-a-custom-event-in-c/286942/16
https://medium.com/@rdolivo/unreal-engine-how-to-declare-a-custom-event-in-c-313cc5dd975a
https://darkcatgame.tistory.com/66
https://woo-dev.tistory.com/331
'--------게임만들기-------- > |Unreal|' 카테고리의 다른 글
[UE5] Day18 - AOE System 구현 (TBD) (0) | 2024.08.19 |
---|---|
[UE5] Day17 - Group Enemy Combat (Token System, Semaphore, Mutex) (0) | 2024.08.01 |
[Unreal] Day 16 - Damage System 구현 (0) | 2024.07.15 |
[UE5] Static Mesh 속성 변경 in C++ (Collision Preset) (0) | 2024.07.14 |
[Unreal] Day 15 - Enemy Type 구현 (Blueprint, Behavior Tree) (0) | 2024.07.13 |