목차
- BlueprintNativeEvent
1. BlueprintNativeEvent
히트 후 소리를 재생하고 싶다. 히트 반응은 C++에서 구현하지만 사운드는 C++가 아닌 블루프린트에서 설정을 하고 싶다. 이 경우에 어떻게 해야할까?
GetHit함수를 C++에서도 구현하고 블루프린트에서도 구현을 하고 싶다.
하지만 현재 GetHit는 블루프린트에서 설정이 불가능하다. 인터페이스에서 상속받고 있는데 인터페이스에서 설정은
public:
virtual void GetHit(const FVector& ImpactPoint) = 0;
UFUNCTION 매크로 조차 존재하지 않는다.
그래서 이제 이 함수를 바꿀 필요가 있다. 이제 UFUNCTION 매크로를 추가해주자.
public:
UFUNCTION(BlueprintNativeEvent)
void GetHit(const FVector& ImpactPoint);
BlueprintNativeEvent 속성은 블루프린트와 C++ 모두에서 함수를 다룰 수 있게 해준다.
함수의 선언을 자세히 보면 virtual 키워드도 없고 "= 0"도 없는, 다시 말해 더이상 순수가상함수가 아니다. 언리얼엔진에서는 UFUNCTION 매크로를 주면 이 모든 기능을 자동으로 처리해준다.
비록 가상함수는 아니지만 여전히 이를 오버라이드 할 수 있으며 그동안 썼던 방식에서 살짝 변해야 한다.
GetHit 함수를 오버라이드하고 있는 파일들로 가보자.
에너미 헤더파일로 들어가면 더이상 가상함수가 아니기 때문에 오버라이드가 되지 않는 것을 볼 수 있다.
_Implementation
키워드를 함수명 뒤에 붙혀주자.
물론 이렇게 하면 cpp 파일도 수정해야 한다.
이제 오류가 나는 부분들을 전부 수정해주자.
이제 GetHit_Implementation 사용하기 위해서는 함수를 호출하면 되는데 기존에 사용했던 방식으로 호출하지는 못한다고 한다.
참고로 현재 호출은 무기 cpp 에서 하고 있으며,
// 생략
if (HitResult.GetActor())
{
IHitInterface* HitInterace = Cast<IHitInterface>(HitResult.GetActor());
if (HitInterace)
{
HitInterace->GetHit(HitResult.ImpactPoint);
}
// 생략
이러한 방식으로 호출하고 있었다.
이제 이렇게 직접 호출하는 것이 아닌,
Execute를 사용하면 된다.
BlueprintNativeEvent 함수를 만들때 자동으로 만들어준 함수라고 한다.
함수를 만들면 매개변수가 조금 다른 것을 볼 수 있다. UObject가 매배변수로 추가되어있는데 여기서 객체는 해당 함수를 실행할 객체를 말한다.
여기서 함수를 실행할 객체는 타격받는 객체가 될 것이다.
이제 이렇게 설정해주면 된다. 위에는 처음에 인터페이스 함수를 호출했던 방식이고 밑은 이제 새롭게 바뀐 인터페이스 호출 방식이다.
위엣 부분은 필요없으니 이제 지우도록 하자.
IHitInterface* HitInterace = Cast<IHitInterface>(HitResult.GetActor());
if (HitInterace)
{
HitInterace->Execute_GetHit(HitResult.GetActor(), HitResult.ImpactPoint);
}
이제 이렇게 하면 C++에서도 설정하고 블루프린트에서도 설정할 수 있는 함수의 호출이 완료된다.
이제 컴파일 하고 에디터로 들어가보자.
블루프린트에서 정상적으로 함수를 호출할 수 있는 것을 볼 수 있다. 현재 이 함수는 블루프린트에서 설정한 함수이고 C++ 버전도 호출할 수 있다.
우클릭하면 부모 함수를 호출할 수 있는데 C++ 함수를 말한다.
이제 함수도 호출할 수 있으니 이어서 다양한 작업들을 해보도록 하자.
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 40. 액터를 부수면 아이템 스폰하기 (0) | 2024.10.31 |
---|---|
[언리얼 실습] 39. 액터가 부셔질 때 효과음을 내고 사라지게 하기 (0) | 2024.10.31 |
[언리얼 실습] 37. 파괴가능한 액터 (0) | 2024.10.31 |
[언리얼 실습] 36. 무기로 필드 시스템 생성하기 (0) | 2024.10.31 |
[언리얼 실습] 35. 필드 시스템 액터 (0) | 2024.10.30 |