https://dev.epicgames.com/documentation/ko-kr/unreal-engine/objects-in-unreal-engine
1. UCLASS 매크로
언리얼에는 게임 오브젝트를 처리하기 위한 시스템이 존재한다.
언리얼엔진은 UObject에서 파생된 클래스에 UCLASS 매크로를 붙여 통해 게임 오브젝트 처리 시스템이 인식할 수 있도록 한다.
그 결과 언리얼 엔진의 GC, Reflection 등의 시스템을 사용할 수 있게 된다.
추가적으로 UObject의 함수나 변수 또한 매크로를 통해 언리얼 엔진이 인식할 수 있게 해줄 수 있다.
- UPROPERTY()
- UFUNCTION()
참고 글)
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에 적합하다고 한다.
'Unreal Engine' 카테고리의 다른 글
Unreal Engine - Standalone을 리슨 서버로 확장하기 (0) | 2025.03.24 |
---|---|
Unreal Engine - Gameplay Framework (0) | 2025.03.24 |
Unreal Engine - 채팅 (리슨 서버) (0) | 2025.03.14 |
Unreal Engine - Main Menu (흐름 위주의 정리) (0) | 2025.03.07 |
UE5 Issues : ADS (Aim Offset 1D) (0) | 2025.03.05 |