class AMyActor : public AActor
{
GENERATED_BODY()
// 에디터에서 편집 가능
UPROPERTY(EditAnywhere)
int32 Health;
// 블루프린트에서 읽기/쓰기
UPROPERTY(BlueprintReadWrite)
float Speed;
// 네트워크 복제
UPROPERTY(Replicated)
FVector Position;
};
주요 지정자:
EditAnywhere: 에디터 어디서든 편집 가능EditDefaultsOnly: 블루프린트 기본값만 편집EditInstanceOnly: 배치된 인스턴스만 편집BlueprintReadWrite: 블루프린트에서 읽기/쓰기BlueprintReadOnly: 블루프린트에서 읽기만Replicated: 네트워크 복제ReplicatedUsing=함수명: 복제 시 OnRep 호출class AMyActor : public AActor
{
// 블루프린트에서 호출 가능
UFUNCTION(BlueprintCallable)
void TakeDamage(float Damage);
// 블루프린트에서 구현 가능 (이벤트)
UFUNCTION(BlueprintImplementableEvent)
void OnDeath();
// C++에서 기본 구현 + 블루프린트에서 오버라이드 가능
UFUNCTION(BlueprintNativeEvent)
void Attack();
// 서버 RPC
UFUNCTION(Server, Reliable)
void ServerFire();
};
주요 지정자:
BlueprintCallable: 블루프린트에서 호출 가능BlueprintPure: 블루프린트에서 순수 함수 (실행 핀 없음)BlueprintImplementableEvent: 블루프린트에서만 구현BlueprintNativeEvent: C++ 기본 구현 + 블루프린트 오버라이드Server/Client/NetMulticast: RPC 타입UCLASS()
class MYGAME_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
};
주요 지정자:
Blueprintable: 블루프린트로 상속 가능BlueprintType: 블루프린트 변수 타입으로 사용 가능Abstract: 추상 클래스, 인스턴스 생성 불가NotBlueprintable: 블루프린트 상속 불가UCLASS()
class AMyActor : public AActor
{
GENERATED_BODY() // 리플렉션 코드 삽입
};
.h 파일을 스캔해서 UPROPERTY, UFUNCTION 등 매크로 탐색.generated.h 파일 생성.generated.h 파일도 함께 컴파일, 메타데이터가 바이너리에 포함됨std::vector, std::map 같은 STL 컨테이너는 리플렉션 시스템이 인식 불가| 매크로 | 대상 | 용도 | 예시 |
|---|---|---|---|
| UPROPERTY | 변수 | 변수 노출 | UPROPERTY(EditAnywhere) |
| UFUNCTION | 함수 | 함수 노출 | UFUNCTION(BlueprintCallable) |
| UCLASS | 클래스 | 클래스 등록 | UCLASS() |
| USTRUCT | 구조체 | 구조체 등록 | USTRUCT(BlueprintType) |
| UENUM | 열거형 | 열거형 노출 | UENUM(BlueprintType) |
| GENERATED_BODY | 클래스 내부 | 리플렉션 코드 삽입 | 필수 매크로 |