본문 바로가기
Unreal Engine/Unreal 기초

UnrealEngine 리플렉션

by k99812 2025. 3. 31.

https://www.youtube.com/watch?v=VpEe9DbcZIs&t=9s

이 글은 해당 영상을 정리한 글입니다.

 

UObject

언리얼 엔진에서 제공하는 클래스들은 베이스 클래스로 UObject를 상속받아 생성됨

출처 : https://www.youtube.com/watch?v=VpEe9DbcZIs&t=9s

 

리플렉션

  • 리플렉션
    런타임중 객체의 유형이나 속성을 볼 수 있게 해주는 기능

리플렉션이 필요한 이유

  • 다른 모듈에 정의된 사용자 클래스 객체들도 엔진 내의 시스템이 관리해야 함
  • 컴파일 타임에는 해당 클래스들을 알 수 없음 그래서 런타임 리플렉션이 필요

리플렉션 지정

출처 : https://www.youtube.com/watch?v=VpEe9DbcZIs&t=9s
출처 : https://www.youtube.com/watch?v=VpEe9DbcZIs&t=9s

 

일반 C++클래스들은 해당 매크로들을 지정하지 못함

 

언리얼 C++의 클래스와 구조체 차이

출처 : https://www.youtube.com/watch?v=VpEe9DbcZIs&t=9s

 

C++에선 클래스와 구조체의 차이점이 없지만 언리얼 C++에선 위 표와같이 차이점이 있음 

 

언리얼 헤더 툴

  • 작성한 코드들은 언리얼 헤더 툴에 의해 먼저 분석됨
  • UCLASS 매크로가 붙은 클래스들을 찾아 리플렉션 정보를 수집
    1. 언리얼 헤더툴 실행
    2. C++ 컴파일러 실행

수집한 리플렉션 정보를 통해 런타임중 리플렉션 객체들을 생성하기 위한 코드들을 언리얼 헤더 툴이 자동으로 생성함

 

리플렉션 객체

UCLASS 

출처 : https://www.youtube.com/watch?v=VpEe9DbcZIs&t=9s

 

UCLASS 매크로가 붙은 클래스는 위 그림과 같이 리플렉션 객체들이 생성됨

Name에 클래스이름을 저장, 포인터를 통해 자식객체를 저장함

 

UPROPERTY

 

UPROPERTY의 리플렉션 객체는

  1. 자기를 소유한 클래스의 정보
  2. AActor의 이름과 클래스 정보를 가르키는 포인터
  3. int의 이름을 저장한 UIntProperty

로 구성됨

 

UFUNCTION

 

UFUNCTION 리플렉션 객체는

  1. 자기를 소유한 클래스 정보
  2. 함수 정보
  3. 매개변수 정보
  4. 리턴변수 정보

로 구성됨

 

UFUNCTION 은 매개변수, 리턴값을 가지고 있는 USTRUCT로 구분할 수 있음

ex) 네트워크 RPC를 호출할때 구조체의 레이아웃을 사용해 패킷을 전송

 

리플렉션을 사용하는 언리얼 시스템들

런타임중 객체의 정보를 알 수 있는 리플렉션에 여러 시스템들이 의존함

 

  • 네트워크 리플리케이션
  • 블루프린트 ↔ C++ 연동
  • 언리얼 에디터 연동
  • 자동 시리얼라이제이션
  • 가비지 컬렉션