#1. UFUNCTION 매크로
1. 개념
UFUNCTION()은 언리얼 엔진에서 C++ 함수를 엔진의 에디터에서 상호 운용이 가능하도록 해주는 매크로입니다. 이를 통해, C++ 환경에서 선언한 함수를 블루프린트에서 호출하거나, 정의하거나, 혹은 오버라이딩 할 수 있습니다.
2. 특징
- 블루프린트와 C++간 상호 운용성 제공
- 리플렉션 시스템 지원으로 런 타임에 함수 정보 접근 가능
- 네트워크 리플리케이션, RPC 등 고급 기능 활성화
3. 종류
- BlueprintCallable
- BlueprintImplementableEvent
- BlueprintNativeEvent
- Server
- Client
- NetMulticast
- Exec
#1. BlueprintCallable
1. 개념
BlueprintCallable 키워드는 UFUCNTION 매크로의 지정자로, C++에서 정의한 함수를 언리얼 엔진 에디터의 블루프린트 시스템에서 호출할 수 있습니다.
2. 특징
- C++과 블루프린트 상호 운용성 제공
- 디자이너와 협업
- 블루프린트에서 함수의 매개변수와 반환 값 처리
3. 코드
UCLASS()
class AMyActor : public AActor
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "MyFunctions")
void SimpleFunction()
{
UE_LOG(LogTemp, Warning, TEXT("SimpleFunction called"));
}
};
#3. BlueprintImplementable
1. 개념
BlueprintImplementable은 UFUNCTION 매크로의 지정자로, C++에서 선언만 하고 실제 구현은 블루프린트에서 할 수 있게 해주는 이벤트 함수를 정의합니다.
2. 특징
- C++에서 선언만 하고 본문을 구현하지 않습니다.
- 블루프린트 상에서 해당 함수는 이벤트 형식으로 나타나며, 원하는 로직을 자유롭게 구현할 수 있습니다.
- C++에서 해당 함수를 호출하면, 블루프린트에서 구현한 로직이 실행됩니다.
- 게임플레이 로직 혹은 커스텀 이벤트를 블루프린트에서 구현할 수 있도록 할 때, 활용합니다.
3. 코드
UCLASS(BlueprintType)
class AMyCharacter : public ACharacter
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintImplementableEvent, Category = "Character Events")
void OnHealthChanged(float NewHealth, float HealthDelta);
void TakeDamage(float DamageAmount)
{
Health -= DamageAmount;
OnHealthChanged(Health, -DamageAmount);
}
private:
float Health = 100.0f;
};
#4. BlueprintNativeEvent
1. 개념
BlueprintNativeEvent는 UFUNCTION 매크로의 지정자로, C++에서 기본 구현을 제공하는 동시에 블루프린트에서 선택적으로 오버라이드 가능한 함수를 정의합니다.
2. 특징
- C++에서 기본 구현 제공, 블루프린트에서 선택적 오버라이딩
- C++에서 함수 선언 시 <함수_Implementation> 함수를 추가적으로 선언하고, 구현 내용을 implementation 함수에 작성합니다.
- 블루프린트에서 오버라이딩 작업 시 Super 호출을 통해 C++ 구현을 가져올 수 있습니다.
- BlueprintNativeEvent = BlueprintImplementable + BlueprintCallable
3. 코드
UCLASS(BlueprintType)
class AMyCharacter : public ACharacter
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintNativeEvent, Category = "Character")
void OnLevelUp(int32 NewLevel);
void OnLevelUp_Implementation(int32 NewLevel)
{
UE_LOG(LogTemp, Log, TEXT("Character leveled up to %d"), NewLevel);
}
void LevelUp()
{
CurrentLevel++;
OnLevelUp(CurrentLevel);
}
private:
int32 CurrentLevel = 1;
};
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal]#FInputMode (2) | 2024.09.08 |
---|---|
[Unreal]#UI 최적화 (1) | 2024.08.28 |
[Unreal]#비동기 프로그래밍 (0) | 2024.08.21 |
[Unreal]#ESlateVisibility, UI 가시성 (0) | 2024.08.21 |
[Unreal]#Delegate, Event, Delegate vs Event (0) | 2024.07.30 |