게임 엔진/Unreal

[Unreal Engine] Object

Henzee 2025. 6. 15. 00:33

 

 


 

 

1. Unreal Object

문서 링크 : Unreal Object

 

1) 모던 객체 지향 설계 원칙

  • 디자인 패턴을 필두로 안정적인 설계 방법이 연구됨
  • 유지보수와 유연함, 확장성 향상을 위한 객체 지향 프로그래밍 원칭 (SOLID)
    • Single responsibility principle: 하나의 클래스는 하나의 책임만 가져야 한다.
    • Open/closed principle: 클래스 설계를 변경하지 않고 동작을 확장할 수 있어야 한다.
    • Liskov substitution principle: 자식 클래스는 부모 클래스를 대체 사용할 수 있어야 한다.
    • Interface segregation principle: 작고 명확한 인터페이스들로 분리해 관리해야 한다.
    • Dependency inversion principle: 구현을 배제시킨 상위 정책을 바라보며 설계해야 한다.
  • 후발 언어(C#, Java) 등이 보완한 새로운 기능
    • 인터페이스(Interface): 객체 설계의 틀을 제공하는 추상 클래스
    • 리플렉션(Reflection): 런타임에서 객체의 구조를 파악하고 객체에 메타 데이터를 부여
    • 델리게이트(Delegate): 프로그램에서 발생한 이벤트를 다수의 객체에 효과적으로 전달하는데 활용

→ 게임 규모가 대형화되면서 모던 객체 지향 설계 도입이 필요해짐

 

 

 

2) 언리얼 오브젝트

언리얼 엔진 시스템

 

  • 언리얼 엔진이 설계한 새로운 시스템의 단위: 오브젝트(객체)
    • 기존 C++ 오브젝트에 모던 객체 지향 설계를 위해 다양한 기능을 추가한 오브젝트
    • 일반 C++ 오브젝트와 언리얼 오브젝트 두 객체를 모두 사용 가능
    • 구분을 위해 일반 C++ 오브젝트는 F, 언리얼 오브젝트는 U를 접두사로 사용
  • 각 오브젝트의 사용 용도
    • C++ 오브젝트: 저수준의 빠른 처리를 위한 기능 구현에 사용
    • 언리얼 오브젝트: 콘텐츠 제작에 관련된 복잡한 설계 구현에 사용
  • 매크로 및 API
    • UCLASS(): 언리얼 오브젝트로 지정하기 위해 사용하는 매크로, CDO(Class Default Object)를 하나 유지하는 기능
    • NewObject<class>(): 언리얼 오브젝트 생성을 위한 함수

 

 

3) 언리얼 오브젝트의 특징

  • 클래스 기본 객체(CDO, Class Default Object): 클래스의 기본값과 타입 정보 제공
  • 리플렉션(Reflection): 런타임에서 클래스 정보 참조 기능
  • 인터페이스(Interface): 모던 객체 지향 언어가 제공하는 인터페이스의 제공
  • 향상된 열거형
  • 델리게이트(Delegate): 객체 간의 결합을 낮출 수 있는 델리게이트 기능 제공
  • 가비지 컬렉션(Garbage Collection): 자동 메모리 관리
  • 향상된 구조체(Struct): 리플렉션이 가능한 구조체 지원
  • 직렬화(Serialization): 객체 정보를 바이트 스트림으로 저장, 전송, 로드하는 기능

 

 


 

 

2. Unreal Object 생성

1) C++ 클래스 생성

Tools > New C++ Class > Object 선택 후 Next 버튼 클릭

 

이름 지정 후 Create Class 버튼 클릭

 

 

2) Object Class 살펴보기

MyObject.h의 헤더

  • 언리얼 오브젝트가 되기 위해 기본적으로 포함해야 하는 헤더(위에서부터 두개)
  • 객체이름.generated.h: 프로젝트 폴더 내 Intermediate > Build > Win64 > UnrealEditor > Inc > ProjectName > UHT 경로에 존재, Unreal Header Tool(UHT)에 의해 빌드 시 생성됨

 

  • ProjectName_API: 해당 오브젝트가 다른 모듈에서도 사용할 수 있도록 지정
  • GENERATED_BODY(): generated.h에 있는 헤더 파일을 사용하기 위해 선언