유저 입장에서는 단일 컴퓨터에서 최대 성능을 뽑아낼 수 있어야한다.
개발자 입장에서는 규모에 따라 복잡해지는 기능들을 안정적으로 관리할 수 있어야한다.
결국 유저 입장에서의 성능이 중요해지기 때문에 성능이 중요하다.
그래서 저수준까지 제어가 가능한 C++를 사용한다.
하지만 C++은 오래된 언어이고 후발주자로 나온 객체지향 언어들은 안정성을 챙기기 시작한다.
언리얼은 무려 어떤 선택을 하였는가.
자기들의 C++을 구축하여 두마리 토끼를 다 잡으려 하였다.
이런 언리얼 엔진의 시스템에서 등장하는 것이 바로 언리얼 오브젝트!
언리얼 엔진 시스템에서의 새로운 단위 객체이다.
구분을 위해 C++ 오브젝트는 F
언리얼 오브젝트는 U
를 사용한다.
C++오브젝트는 저수준의 빠른 처리를 위해,
언리얼 오브젝트는 컨텐츠 개발의 복잡한 설계를 위해 사용된다.
#include "FileName.generated.h"
을 사용하여 다양한 매크로를 사용할 수 있음 (UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY())UCLASS
는 GENERATED_UCLASS_BODY()
와 매칭됨GENERATED_UCLASS_BODY()
는 리플렉션된 클래스나 구조체에 필수적, 필요한 것들을 주입해줌FArchive
객체와 void Serialize(FArchvie& Ar)
인터페이스를 사용해서 구현한다.UCLASS
의 클래스 디폴트 오브젝트가 변경되면 엔진은 그 클래스의 모든 인스턴스 로드시 알아서 변경사항을 적용 시도하게 된다.Cast<>()
)UProperty
에는 태그를 붙여 네트워크 플레이 도중 데이터의 리플리케이트 여부를 알릴 수 있다.UFunction
에서도 태그를 붙여 원격 머신에서 실행 시킬 수 있다.UPROPERTY
UFUNCTION
모든 오브젝트들은 클래스 정보를 갖고 있다.
GetClass()
StaticClass()
등을 활용하여 이 클래스 정보를 가져올 수 있다.
언리얼 클래스 정보에 포함되어 있으며 언리얼 객체가 가진 기본 값을 보관하는 템플릿 객체이다.
한 클래스로부터 다수의 물체를 생성해 게임에 배치할 때 기본 값을 조정하는데 유용하다.
기본 값은 생성자에서 설정할 수 있다.
GetDefaultObject()
함수를 통해 얻을 수 있다.
UClass
와 CDO
는 엔진 초기화 과정에서 생성된다.
❗주의할점: 말 그대로 엔진 초기화 과정에서 생성되기 때문에 만약 저 값들 중 혹은 헤더 파일에 변경 사항이 생긴다면 에디터를 끄고 다시 빌드하여 실행해야한다.