KoreanFoodie's Study

언리얼 오브젝트 계층 구조 요약 (Unreal Object Hierarchy) 본문

Game Dev/Unreal C++ : Study

언리얼 오브젝트 계층 구조 요약 (Unreal Object Hierarchy)

GoldGiver 2022. 3. 30. 15:43

언리얼 오브젝트 생성

언리얼 오브젝트를 생성할 때는 기본적으로 NewObject<class>( ) 를 사용한다. 이번에는 ABGameInstance 에서 WebConnection 이라는 DefaultSubobject 를 생성했다고 가정해 보자.

ABGameInstance 에서는 GetDefaultSubobject 를 호출해 WebConnection 을 조회하고, WebConnection 에서는 GetOuter 를 호출해 ABGameInstance 를 조회할 수 있다.

 

 

NewObject vs CreateDefaultSubobject

그렇다면 어떤 것을 써야 할까?

두 가지 모두 언리얼 오브젝트를 생성한다는 것은 같으나, 생성 방식에서 차이가 존재한다. 다음의 코드를 보자.

...
#include "ABGameInstance.h"

UABGameInstance::UABGameInstance()
{
	WebConnection = CreateDefaultSubobject<UWebConnection>(TEXT("DefaultWebConnection"));
}

void UABGameInstance::Init()
{
	WebConnectionNew = NewObject<UWebConnection>(this);
}

WebConnection 은 ABGameInstance 의 생성자가 호출될 때 자동으로 생성되지만, 후자인 WebConnectionNew 는 프로그래머가 런타임에서 직접 생성해 주어야 한다.

전자의 방식을 Static, 후자의 방식을 Dynamic 하다고 표현해 볼 수 있다. 전자의 경우는 변경될 여지가 거의 없는 오브젝트들을 한번에 생성할 때 유리하고, 후자의 방식은 상황에 맞게 유연하게 대처할 수 있다는 특징이 있다.

 

 

월드의 구성

언리얼에서는 게임 컨텐츠가 월드에 올라가게 된다. 월드는 시작 지점으로 설정된 레벨이 있는데, 이것을 퍼시스턴트 레벨이라고 한다. 레벨은 다시 액터와 게임의 규칙 및 설정을 관리하는 월드 세팅으로 나뉘게 된다.

스트리밍 레벨은 월드에 무관하게 삭제/추가가 가능한 레벨을 의미한다.

예를 들어 PvP 게임을 플레이한다고 했을 때, 좀비 모드를 할지 배틀 로얄을 할지 팀 전으로 할지 등등의 규칙은 월드 세팅에 포함된다. 즉, 세팅은 플레이시마다 바뀌므로, 미리 생성하게 되면 맵마다 하나씩의 복사본이 생겨 자원이 낭비될 것이다. 반면 액터는 컴포넌트의 조합과 함께 알아서 동작하도록 설계되었으므로, 스태틱하게 생성하는 것이 유리하다. (빨간색 박스 친 부분)

Comments