언리얼 엔진의 리플렉션 시스템은 C++ 클래스의 변수 및 함수 정보를 엔진 내부의 메타데이터 형태로 저장하고, 이를 에디터나 블루프린트에서 활용할 수 있게 만들어주는 기술
#include "Item.generated.h"UCLASS()GENERATED_BODY()언리얼의 코드 생성 도구가 사용하는 코드를 삽입하는 역할
클래스 내부에 필요한 리플렉션 정보를 자동으로 생성
리플렉션 시스템 활용해서 멤버 변수와 함수 블루프린트에서 사용할 수 있게 설정
함수의 경우 UFUNCTION, 멤버 변수의 경우 UPROPERTY 사용해서 설정
UPROPERTY() 매크로의 주요 지정자
1. 편집 가능 범위 지정자
- VisibleAnywhere: 읽기 전용으로 표시되며, 수정은 불가능
- EditAnywhere: 클래스 기본값, 인스턴스 모두에서 수정 가능
- EditDefaultsOnly: 클래스 기본값에서만 수정 가능
- EditInstanceOnly: 인스턴스에서만 수정 가능
2. Blueprint 접근성 지정자
- BlueprintReadWrite: Blueprint 그래프에서 Getter/Setter로 값을 읽거나 쓸 수 있습니다.
- BlueprintReadOnly: Blueprint 그래프에서 Getter 핀만 노출되어, 읽기만 가능합니다.
3. Category 지정자
- Details 패널에서 이 변수는 “Rotation” 범주(폴더) 아래에 표시됩니다.
- 여러 변수를 비슷한 카테고리에 묶으면, 세부 정보 패널에서 깔끔하게 정리되어 보입니다.
4. 메타 옵션 지정자
- meta=(ClampMin="0.0"): 에디터에서 변수 입력 시 최소값**을 제한할 수 있습니다.
- meta=(AllowPrivateAccess="true"): 해당 멤버가 private로 선언되어 있어도, 에디터나 Blueprint에서 접근할 수 있도록 허용합니다.
UFUNCTION() 매크로의 주요 지정자
- BlueprintCallable
- Blueprint 이벤트 그래프(노드)에서 호출(Execute) 가능한 함수로 만듭니다.
- BlueprintPure
- Getter 역할만 수행합니다. (Exec 핀 없이 Return Value만 노출)
- BlueprintImplementableEvent
- 함수의 선언만 C++에 있고, 구현은 블루프린트에서 하도록 합니다. C++ 코드에서는 함수 이름만 정의하고, 실제 동작은 Blueprint Event Graph 안에서 이벤트 노드처럼 구현됩니다.
protected:
//루트 컴포넌트를 나타내는 Scene Coomponent 포인터
//멤버 변수를 리플렉션 시스템에 노출
//리플렉션 시스템 등록
// Root Scene Component, 에디터에서 볼 수만 있고 수정 불가
UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category="Item|Components")
USceneComponent* SceneRoot;
// Static Mesh, 에디터와 Blueprint에서 수정 가능
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Item|Components")
UStaticMeshComponent* StaticMeshComp;
UPROPERTY(EditDefaultsOnly,BlueprintReadOnly,Category="Item|Components")
float RotationSpeed;
// 함수를 블루프린트에서 호출 가능하도록 설정
UFUNCTION(BlueprintCallable,Category="Item|Actions")
void ResetActorPosition();
// 블루프린트에서 값만 반환하도록 설정
UFUNCTION(BlueprintPure,Category="Item|Properties")
float GetRotationSpeed() const;
// C++에서 호출되지만 구현은 블루프린트에서 수행
UFUNCTION(BlueprintImplementableEvent,Category = "Item|Event")
void OnItemPickedUp();
실제 블루프린트에서 반영되서 이벤트 그래프에서 확인 가능
