GameObject와 UObject 및 액터 비교
Unity에서 GameObject는 프로그래밍 가능한 게임 내 오브젝트를 나타냅니다. GameObject는 그 자체로는 많은 기능을 수행하지 않으며, 특정 기능을 제공하는 라이트나 메시 같은 컴포넌트를 담는 컨테이너 역할을 합니다. 모든 GameObject에는 월드에서의 위치와 방향을 나타내는 트랜스폼 컴포넌트가 연결되어 있습니다.
언리얼 엔진(UE)에서 UObject는 게임 월드에 있는 프로그래밍 가능한 오브젝트를 나타냅니다. UObject 클래스는 UE에서 대다수 클래스가 공유하는 베이스 클래스로 작동합니다. 이 접근 방식은 자동 가비지 컬렉션 및 다양한 이점을 제공하는 언리얼 엔진 리플렉션 시스템을 지원합니다.
UObject의 서브클래스인 액터(Actor)는 Unity의 GameObject와 거의 동등한 클래스입니다. 액터는 UE의 컴포넌트 시스템과 트랜스폼(USceneComponent)을 지원하므로 월드에 배치할 수 있습니다. 하지만 Unity와의 가장 큰 차이점은 컴포넌트에만 의존하지 않고 액터의 기능을 직접 확장할 수 있다는 점입니다.
오브젝트 구현에 UObject의 서브클래스들이 제공하는 추가 기능이 필요하지 않은 경우, UObject를 직접 확장하면 더 가벼운 구현이 가능합니다. UObject에 대한 자세한 내용은 오브젝트를 참조하세요.
컴포넌트 시스템 비교
Unity와 마찬가지로 UE에는 게임 오브젝트에 재사용 가능한 기능을 연결할 때 사용할 컴포넌트 시스템이 있습니다. 자신만의 컴포넌트를 처음부터 새로 만들 수도 있고, UE와 함께 제공되는 여러 컴포넌트 중 하나를 확장하여 생성할 수도 있습니다. 하지만 무엇을 하든 먼저 다음 핵심 컴포넌트 타입을 이해하는 것이 좋습니다.
액터 컴포넌트(Actor Component) - 액터에 연결되는 베이스 컴포넌트 타입입니다. 액터 컴포넌트에는 트랜스폼이 없으므로 월드에 물리적으로 위치하지 않습니다. 인벤토리 또는 어트리뷰트 관리와 같은 추상적인 행동에 유용합니다.
씬 컴포넌트(Scene Component) - 월드 포지셔닝을 위해 트랜스폼을 추가하는 액터 컴포넌트의 한 타입입니다. 씬 컴포넌트는 시각적으로 표현되지 않으므로 물리력, 카메라 또는 오디오와 같은 비시각적 위치 기반 행동에 적합합니다.
프리미티브 컴포넌트(Primitive Component) - 시각적 표현과 물리적 표현을 추가하는 씬 컴포넌트의 타입입니다. 시각적 엘리먼트와 콜리전 볼륨을 렌더링하는 데 적합합니다.
Unity에서는 부모-자손 관계를 사용하여 복잡한 GameObject를 생성할 수 있습니다. 예를 들어, 부모 오브젝트는 자체적인 메시, 콜라이더, 행동이 있는 여러 자손 오브젝트를 가질 수 있습니다.
UE에서는 자손 액터 대신 컴포넌트를 사용하여 비슷한 계층구조의 액터를 빌드하여 퍼포먼스와 메모리 비용을 절약할 수 있습니다.
UE의 컴포넌트 시스템에 대한 자세한 내용은 컴포넌트 문서를 참조하세요.
Update()와 Tick() 비교
Unity에서 컴포넌트 업데이트는 주로 MonoBehaviour의 Update() 및 FixedUpdate()를 통해 이루어집니다.
UE에서 액터는디폴트로 활성화되는 Tick()을 사용하고, 컴포넌트는 디폴트로 비활성화되는 TickComponent()를 선택적으로 사용합니다.
기본적으로 티킹은 프레임당 한 번 발생합니다. TG_DuringPhysics 같은 틱 그룹을 지정하여 또 다른 티킹 간격을 지정할 수 있습니다. 또한, 틱 종속성을 지정하여 지정된 다른 틱 함수가 완료될 때까지 틱을 방지할 수도 있습니다.
자세한 내용은 다음 리소스를 참조하세요.
게임플레이 프레임워크
언리얼 엔진의 게임플레이 프레임워크는 액터와 컴포넌트를 포함하여 게임플레이 경험을 빌드할 모듈형 기반을 제공하는 클래스의 컬렉션입니다.
Unity의 게임플레이 구현과 UE의 게임플레이 프레임워크 사용을 비교해 보면, 비슷한 점보다는 다른 점이 많습니다. 따라서 이 문서에서 다루는 콘셉트가 프레임워크에 어떻게 적용되는지 자세히 알아보려면 게임플레이 프레임워크 섹션을 복습하는 것이 좋습니다. 또한, 아래 섹션에서는 몇 가지 중요한 프레임워크 클래스를 간략하게 살펴보겠습니다.
중요 UObject 서브클래스
레벨(Level) - 게임에서 레벨을 구성하는 게임 오브젝트 세트를 포함합니다. 레벨은 Unity의 씬과 비슷합니다.
데이터 에셋(Data Asset) - 게임의 데이터를 저장하는 에셋을 정의하는 데 사용됩니다. 데이터 에셋은 Unity의 ScriptableObject와 비슷합니다.
중요 액터 서브클래스
폰(Pawn) - 월드 내에서 '에이전트' 역할을 합니다. 컨트롤러는 폰에 빙의하여 폰을 컨트롤할 수 있습니다.
캐릭터(Character) - 인간형 캐릭터를 나타내며 기본적인 이동과 콜리전 기능을 제공하는 폰 타입입니다.
컨트롤러(Controller) - 폰에 빙의한 후 폰의 조종을 담당합니다.
플레이어 컨트롤러(PlayerController) - 로컬 인간 플레이어에게 폰 조종 기능을 제공하는 데 사용합니다.
AI 컨트롤러(AIController) - 인공 지능으로 폰을 조종하는 데 사용됩니다.
게임 모드(Game Mode) - 게임을 정의하고 설정하는 매니저 액터입니다.
게임 스테이트(Game State) - 게임의 스테이트 정보를 포함합니다.
플레이어 스테이트(Player State) - 플레이어의 스테이트 정보를 포함합니다. 게임 스테이트는 배열 내의 모든 플레이어 스테이트를 추적합니다.