Unreal Engine

Unreal Engine - UObject

gbleem 2025. 3. 24. 17:12

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/objects-in-unreal-engine

 

1. UCLASS 매크로


언리얼에는 게임 오브젝트를 처리하기 위한 시스템이 존재한다.

언리얼엔진은 UObject에서 파생된 클래스에 UCLASS 매크로를 붙여 통해 게임 오브젝트 처리 시스템이 인식할 수 있도록 한다. 

그 결과 언리얼 엔진의 GC, Reflection 등의 시스템을 사용할 수 있게 된다.

 

추가적으로 UObject의 함수나 변수 또한 매크로를 통해 언리얼 엔진이 인식할 수 있게 해줄 수 있다.

  • UPROPERTY()
  • UFUNCTION() 

참고 글)

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

 

 

2. UObject 생성


new를 통해서 생성할 수 없다.

  • 런타임에 생성하기 위해서는 NewObject<class> 를 사용하거나
  • 생성자의 경우 CreateDefaultSubobject<class> 를 사용해서 생성해야 한다.
  • 그 결과 GC가 알아서 자동으로 해제해준다.

주의점) 

  • UObject의 생성자는 가벼워야 하고 default 값 설정 및 subobject를 구성하는 데에만 사용해야 한다.
  • 생성 시 다른 함수 기능을 호출하지 말고, 액터나 액터 컴포넌트인 경우 초기화는 BeginPlay에서 한다.

 

 

3. UObject를 통해 제공되는 함수 기능


  • GC
  • 레퍼런스 업데이트
  • reflection
  • 직렬화
  • 자동 프로퍼티 초기화
  • 디폴트 프로퍼티 변경사항 업데이트
  • 자동 에디터 통합
  • 런타임에 사용 가능한 타입 정보
  • 네트워크 리플리케이션

 

 

4. 헤더의 모습


#pragma once 	

#include 'Object.h'	
#include 'MyObject.generated.h'		

UCLASS()	
class MYPROJECT_API UMyObject : public UObject	
{		
	GENERATED_BODY() 	
};

 

 

5. UObject 업데이트 및 파괴


업데이트

  • 액터나 액터 컴포넌트의 경우 자동으로 호출되는 Tick 함수가 있지만, UObject에는 없다.
    • 그 이유는 UObject는 실제로 존재하는 객체가 아니라 데이터를 관리하는 용도로 쓰기 때문이다.
  • FTickableGameObject 클래스를 추가 상속하여 Tick을 구현하거나
  • Tick이 존재하는 AActor 클래스를 통해 Instance 생성하여 UObject 업데이트 해주는 방법이 있다.

파괴

  • 오브젝트가 더 이상 사용되지 않으면 GC 시스템이 자동으로 오브젝트를 파괴한다

 

 

6. AActor vs. UObject


결론적은 씬에 직접 배치할 필요가 없고, 위치나 Tick 등을 사용하지 않아도 괜찮을 때 오버헤드를 줄이기 위해서 UObject를 사용할 수 있다.

예를 들어, 아이템 데이터, 설정 정보, 퀘스트 정보 등이 UObject에 적합하다고 한다.