Unreal Engine - 클래스와 변수의 리플렉션 (매크로 지정자 위주)

2025. 1. 22. 12:52·Unreal Engine

이전에 관련 이론을 정리한 글

https://gbleem.tistory.com/35

 

Unreal Property System (Reflection)

참고자료https://unrealcommunity.wiki/unreal-property-system-(reflection)-36d1e6 Unreal Property System (Reflection) | Unreal Engine Community WikiBrief description of the Unreal Property System.unrealcommunity.wikihttps://dev.epicgames.com/documentati

gbleem.tistory.com

1. 리플렉션 이란


  • 리플렉션이란!
    • C++ 클래스의 변수 및 함수 정보를 엔진 내부의 메타데이터의 형태로 저장하고, 이를 에디터나 블루프린트에서 활용할 수 있게 해주는 기술
    • 추가적으로 가비지 콜렉션이나, 네트워크에서도 사용할 수 있다.

 

 

2. 리플렉션 사용하기


사용에 앞서 리플렉션을 쓰기 위한 사전 준비가 필요하다

  • .generated.h 헤더
    • 언리얼 엔진이 자동으로 생성해주며, 클래스의 리플렉션과 엔진 통합 코드가 포함되어있다.
    • 주의할 점은 #include 문들 중에서 가장 아래에 위치해야 빌드가 정상적으로 동작한다.
  • UCLASS()
    • 해당 클래스를 언리얼 엔진에 등록한다는 의미
  • GENERATED_BODY()
    • 클래스 내부에 필요한 리플렉션 정보 자동 생성

2-1. UCLASS 매크로 주요 지정자

클래스에 리플렉션을 적용하기

  • default 지정자: UCLASS(Blueprintable, BlueprintType)
    • Blueprintable : 블루프린트가 상속 가능
    • BlueprintType : 변수로 참조 가능
  • 추가 지정자
    • NotBlueprintable : 블루프린트 상속 방지

2-2. UPROPERTY 매크로 주요 지정자

변수에 리플렉션을 적용하기

  • 편집 가능 범위 지정자
    • VisibleAnywhere : 읽기 전용으로 표시, 수정 불가능
    • EditAnywhere : 클래스 기본값, 인스턴스 두 방법 모두 수정 가능
    • EditDefaultsOnly : 클래스 기본값에서만 수정 가능
    • EditInstanceOnly : 인스턴스에서만 수정 가능

cf) 클래스 기본값 (클래스 디폴트) 과 인스턴스의 의미

  • 아래 사진과 같이 C++ 코드로 작성한 값들을 BP로 확인해 보자

  • 아래 사진을 보면
    • RotationSpeed는 EditDefaultsOnly이므로, BP에서 클래스 디폴트의 디테일 창에서 수정할 수 있는 것을 볼 수 있다.
    • 그러나 MovingSpeed는 보이지 않는다. (EditInstanceOnly이므로)

  • 아래 사진을 보면
    • 월드에 해당 BP를 배치한 후 디테일 창을 확인해 본 모습이다.
    • EditInstanceOnly이므로 해당 클래스를 월드에 배치해서 인스턴스화 해야 수정이 가능하다.
    • RotationSpeed는 보이지 않는다.

  • Blueprint 접근성 지정자
    • BlueprintReadWrite : BP에서 값을 읽고 쓸 수 있다. (getter, setter 가능)
    • BlueprintReadOnly : BP에서 값 읽기만 가능하다. (getter 만 가능)
  • Category 지정자
    • 디테일 창에서 우리가 구별하기 쉽게 보여주는 지정자이다.
    • 아래 사진처럼 Item|Properties로 작성한 경우 다음과 같이 표시되는 것을 볼 수 있다.

  • 메타 옵션 지정자
    • meta = (ClampMin = "0.0") : 에디터에서 변수 입력 시 최솟값 제한
    • meta = (AllowPrivateAccess="true") : private 멤버이지만, 에디터나 BP에서 접근가능하게 함

2-3. UFUNCTION 매크로 주요 지정자

함수에 리플렉션을 적용하기

  • BlueprintCallable : 이벤트 그래프에서 호출 가능한 함수로 만들기
  • BlueprintPure : getter 역할만 수행하는 함수로 만들기
  • BlueprintImplementableEvent : 함수의 선언은  C++에서 하고, 구현은 BP에서 하기

 

'Unreal Engine' 카테고리의 다른 글

Unreal Engine - Enhanced Input System (PlayerController)  (2) 2025.01.22
Unreal Engine - GameMode, Pawn, Character  (0) 2025.01.22
Unreal Engine - Actor의 생성과 응용  (0) 2025.01.21
Unreal Engine - 개발 환경 세팅 및 빌드 프로세스  (0) 2025.01.21
Unreal Engine Dedicated Server  (3) 2025.01.13
'Unreal Engine' 카테고리의 다른 글
  • Unreal Engine - Enhanced Input System (PlayerController)
  • Unreal Engine - GameMode, Pawn, Character
  • Unreal Engine - Actor의 생성과 응용
  • Unreal Engine - 개발 환경 세팅 및 빌드 프로세스
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    map을 vector로 복사
    BFS
    const
    gamestate
    싱글턴
    enhanced input system
    motion matching
    DP
    character animation
    addonscreendebugmessage
    blend pose
    C++
    additive animation
    템플릿
    매크로 지정자
    Vector
    상속
    cin함수
    actor 클래스
    applydamage
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
Unreal Engine - 클래스와 변수의 리플렉션 (매크로 지정자 위주)
상단으로

티스토리툴바