본문 바로가기
게임 공부/Unreal Engine

언리얼 오브젝트와 클래스 기본 객체

by woohyeon 2021. 12. 10.
반응형

언리얼 오브젝트

  • 언리얼 실행 환경에 의해 관리되는 C++ 객체
  • 언리얼 엔진에서 항상 모듈 단위로 관리된다.
  • 다음과 같은 기능들을 포함한다.
    • 오브젝트의 초기값을 자체적으로 관리 => CDO(Class Default Object)
    • 자동 메모리 관리 => 가비지 컬렉션을 통해
    • 런타임에 오브젝트의 타입 확인이 가능 => Reflection
    • 오브젝트 정보를 안전하게 관리 => Serialization
    • 함수를 묶어서 효과적으로 관리 및 호출 => Delegate
    • 서버와 클라의 오브젝트 동기화 => Replication
    • 언리얼 에디터의 인터페이스를 통한 오브젝트 제어

 

언리얼 오브젝트 클래스가 되기 위한 조건

  1. [Filename].generated.h 헤더 include
    • 이 헤더 아래 다른 헤더가 있으면 안됨
  2. UCLASS() 매크로 추가
  3. GENERATED_BODY() 추가
    • 클래스 본문에 추가적인 함수나 typedef를 추가해줌
  4. UObject 상속
  5. 소멸자 없어야 함
  6. 생성자는 두 가지만 사용 가능
    • 기본 생성자와 const FObjectInitializer& 타입을 받는 생성자
    • 생성자는 초기에 CDO를 만들기 위한 용도로만 사용되고 이후엔 사용되지 않음
    • 대신 Init() 혹은 BeginPlay()에서 생성자에서 필요한 동작을 정의
    • 만약 특정 멤버를 초기화하고 싶은 경우 const FObjectInitializer& 타입을 받는 생성자 사용 가능
    • ex) 액터에 기본적으로 제공되는 Movement Component(MC) 대신 커스텀 MC를 사용하고 싶은 경우 FObjectInitializer::SetDefaultSubobjectClass() 찾아보기
    <참고로 상위 클래스의 생성자는 모두 자동으로 상속된다>

 

클래스 기본 객체(CDO: Class Default Object)

  • 모든 언리얼 오브젝트는 런타임 초기에 클래스에 설정된 기본값을 통해 객체를 하나 생성한다.
  • 이를 클래스 기본 객체(CDO: Class Default Object)라 한다.
  • CDO는 일종의 Sample 데이터이며, 이를 바탕으로 새로운 인스턴스를 생성한다.
    • 오브젝트를 매번 처음부터 새로 생성 및 초기화하는 것보다 기본적인 값이 설정된 인스턴스를 복제 후 필요 값만 추가로 변경하는 것이 효율적이기 때문



댓글