Unreal Engine/Unreal Engine

[Unreal Engine] 언리얼 오브젝트 (UObject)

CodeHunst 2024. 2. 25. 17:21

언리얼 오브젝트는 언리얼 엔진 내에서 객체를 쉽고 효율적으로 관리하기 위해 고안되었습니다.

 

UObject 는 생성자 호출 전 초기화시 자동으로 0 으로 채워집니다. 클래스, UProperty, 네이티브 멤버 모두에게 전체적으로 벌어지는 일입니다. 그 이후 멤버는 클래스 생성자의 커스텀 값으로 초기화 가능합니다.

CDO (Class Default Object)

UClass 매크로는 UObject 에게 자신의 언리얼에서 기반으로 삼은 유형에 대해 설명해 주는 UClass 로의 레퍼런스를 넘겨줍니다. 각 UClass 는 Class Default Object, 줄여서 CDO 라 불리는 오브젝트를 하나 유지합니다. CDO 는 본질적으로 기본 "템플릿" 오브젝트로, 클래스 생성자에 의해 생성된 이후 변경되지 않습니다. 주어진 오브젝트 인스턴스에 대해 UClass 와 CDO 둘 다 구할 수는 있지만, 일반적으로는 읽기 전용으로 간주되어야 합니다. 오브젝트 인스턴스에 대한 UClass 는 GetClass() 함수를 사용하여 언제든 접근 가능합니다.

 

UObject 생성

UObject는 생성자 실행인자를 지원하지 않습니다. 모든 C++ UObject는 엔진 시작 시 초기화되며, 엔진은 디폴트 생성자를 호출합니다. 디폴트 생성자가 없으면 UObject가 컴파일되지 않습니다.

UObject 생성자는 가벼워야 하고 디폴트값과 서브오브젝트를 구성하는 데에만 사용되어야 하며, 생성 시 다른 함수 기능을 호출해서는 안 됩니다. 액터  액터 컴포넌트의 경우, 대신에 초기화 함수 기능을 BeginPlay() 메서드에 넣어야 합니다.

 

Uobject를 통해 제공되는 함수 기능

모든 경우에 이 시스템을 사용하는 것이 필수이거나 적절한 것은 아니지만 사용하면 다음과 같은 많은 이점이 있습니다.

  • 가비지 컬렉션
  • 레퍼런스 업데이트

PendingKill이 기본적으로 비활성화되면 개발자는 레퍼런스 업데이트를 걱정할 필요가 없으며, 해당 UE 버전에서 줄을 제거할 수 있습니다.

  • 리플렉션 (Reflection) :  객체 정보를 런타임에서 실시간 조회가 가능합니다.
  • 직렬화 (Serialization) : 객체와 속성 정보를 통으로 안전하게 보관하고 로딩합니다.
  • 디폴트 프로퍼티 변경사항의 자동 업데이트 : UClass 의 CDO가 변경되면, 엔진은 그 클래스의 모든 인스턴스 로드시 알아서 변경사항을 적용 시도합니다.
  • 자동 프로퍼티 초기화
  • 자동 에디터 통합 : 언리얼 에디터 인터페이스를 통해 값을 편집할 수 있습니다. 
  • 런타임에 사용 가능한 타입 정보
  • 네트워크 리플리케이션

 

 

가비지 컬렉션

언리얼에서는 더이상 참조되지 않거나 명시적으로 소멸 예약시킨 UObject 를 주기적으로 정리하는 가비지 컬렉션(garbage collection) 스키마를 사용합니다

-> 참조되지 않는 객체를 메모리에서 자동 해제

 

네트워크 리플리케이션

UObject 시스템에는 네트워크 통신과 멀티플레이어 게임을 원활히 하기 위한 탄탄한 함수성 세트가 포함되어 있습니다.

 

 

[참고]

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Objects/

 

오브젝트

기본 게임플레이 요소인 Actor 와 Object 에 대한 설명입니다.

docs.unrealengine.com

https://docs.unrealengine.com/5.3/ko/unreal-object-handling-in-unreal-engine/

 

언리얼 오브젝트 처리

UObject 시스템의 기능에 대한 개요입니다.

docs.unrealengine.com

https://devjino.tistory.com/245

 

[UE4] 언리얼 오브젝트(UObject)

언리얼 오브젝트(UObject) 언리얼 오브젝트는 언리얼 엔진의 관리를 받는 특수한 객체입니다. 그렇다고 모든 클래서가 UObject가 되어야 하는 것은 아니며 필요에 따라서 네이티브 클래스를 사용할

devjino.tistory.com