언리얼 아키텍처

기본 게임플레이 요소인 Actor 와 Object 에 대한 설명입니다.

Windows
MacOS
Linux

이 문서의 목적은 코드베이스 입문을 돕기 위해 엔진의 핵심 기능에 대한 간략한 안내와 일부 핵심 아키텍처 개념을 소개해 드리는 것입니다.

UObject 와 Actor

Actor (액터)란, 월드에 놓을 수 있는 모든 게임플레이 오브젝트의 베이스 클래스 AActor 에서 파생된 클래스의 인스턴스를 말합니다. Object (오브젝트)란, 액터를 포함해서 언리얼 엔진 내 모든 오브젝트의 베이스 클래스 UObject 에서 파생된 클래스의 인스턴스를 인스턴스를 말합니다. 즉 현실적으로 언리얼 엔진의 모든 인스턴스는 오브젝트 인 것입니다. 그러나 액터 라는 용어는 흔히 계층구조상 AActor 에서 파생되는 클래스의 인스턴스를 가리키는 데 사용되는 반면, 오브젝트 라는 용어는 AActor 클래스를 상속하지 않는 클래스의 인스턴스를 가리키는 데 사용됩니다. 계층구조 내 일정 시점에서 생성되는 클래스 대다수는 AActor 를 상속하게 됩니다.

일반적으로 액터 는 완전한 아이템이나 개체로 생각해 볼 수 있는 반면, 오브젝트 는 좀 더 전문화된 부속입니다. 액터 는 보통 하나 이상의 Component (컴포넌트), 즉 전문화된 오브젝트 를 활용하여 그 함수 기능의 일정한 면을 정의하거나 프로퍼티 모음에 대한 값을 담습니다. 차량을 예로 들어 보겠습니다. 차량 전체는 하나의 액터 인 반면, 바퀴나 문짝같은 차량의 부속은 모두 해당 액터의 컴포넌트가 됩니다.

게임플레이 프레임워크 클래스

기본적인 게임플레이 클래스에는 플레이어, 아군, 적군에 대한 표현 및 그에 대한 아바타를 플레이어 입력이나 AI 로직으로 제어하는 데 대한 함수성이 포함되어 있습니다. 또한 플레이어용 카메라나 HUD 생성을 위한 클래스도 있습니다. 마지막으로 GameMode, GameState, PlayerState 같은 게임플레이 클래스로 게임의 규칙을 설정하며, 게임 및 플레이어의 진행상황을 기록하기도 합니다.

이 클래스 모두 레벨에 배치하거나 필요할 때 스폰시킬 수 있는 액터 유형을 생성합니다.

월드에 플레이어, 아군, 적군 표시

pawn_lander.png

Pawn

이란 월드의 대리인 역할을 하는 Actor 입니다. Pawn 은 Controller 에 의해 possess(빙의) 가능하며, 입력을 쉽게 받을 수 있도록 구성 가능하고, 여러가지 다양한 플레이어같은 동작을 할 수 있습니다. 참고로 Pawn 은 인간형이라 가정되지 않습니다.

Character

캐릭터 는 인간형 Pawn 입니다. 기본적으로 콜리전에 쓸 CapsuleComponent 와 CharacterMovementComponent 가 들어있습니다. 기본적인 인간형 동작을 할 수 있으며, 네트워크를 통해 부드러운 이동 리플리케이션이 가능하고, 애니메이션 관련 함수성도 약간 있습니다.

플레이어 인풋 또는 AI 로직으로 폰 제어하기

controller_lander.png

Controller

컨트롤러 는 Pawn 에 대한 지시를 담당하는 Actor 입니다. 보통 두 가지 형태로 등장하는데, AIController 와 PlayerController 입니다. 컨트롤러는 Pawn 에 "possess"(빙의)되어 그 폰을 제어할 수 있습니다.

PlayerController

플레이어 컨트롤러 는 Pawn 과 그것을 제어하는 사람 플레이어를 잇는 인터페이스입니다. PlayerController 는 본질적으로 사람 플레이어의 의지를 나타냅니다.

AIController

AIController 는 말 그대로 Pawn 을 제어하는 의지를 시뮬레이션으로 재현한 것입니다.

플레이어에게 정보 표시하기

camera_lander.png

HUD

HUD 는 "Heads-Up Display" 의 준말이며, 여러 게임에서 볼 수 있는 머리 위에 뜨는 화면 표시기같은 것으로, 생명력, 탄환 수, 총 조준선 등이 표시됩니다. 각 PlayerController 에는 보통 이와 같은 것이 하나씩 있습니다.

Camera

PlayerCameraManager 는 플레이어의 "눈"을 나타내며, 그 동작을 관리합니다. 각 PlayerController 에는 보통 하나씩 있습니다. 자세한 것은 카메라 문서를 참고하세요.

게임의 규칙 설정 및 기록하기

hud_lander.png

GameMode

"게임" 이라는 것의 개념은 두 개의 클래스로 나뉩니다. 게임 모드와 게임 스테이트 는 게임의 규칙이나 승리 조건같은 것이 포함된 게임의 정의로, 서버에만 존재합니다. 보통은 플레이 도중 바뀌는 데이터는 많이 없어야 하며, 클라이언트에서 알아야 하는 트랜션트(휘발성) 데이터는 반드시 없어야 할 것입니다.

GameState

GameState 에는 접속된 플레이어 목록, 점수, 체크 게임에서 말들의 위치, 오픈 월드 게임에서 완료한 퀘스트 목록 등과 같은 것이 포함될 수 있는 게임 상태가 포함됩니다. GameState 는 서버와 모든 클라이언트에 존재하며, 최신 상태 유지를 위해 자유롭게 리플리케이트 가능합니다.

PlayerState

인간 플레이어 또는 플레이어인 척 하는 봇과 같은 게임 참여자의 상태를 말합니다. 게임의 일부로써 존재하는 플레이어가 아닌 AI 에는 PlayerState 가 없습니다. PlayerState 에 적합한 예제 데이터라면, 플레이어 이름, 점수, MOBA 게임류에서의 대전상대 레벨, CTF 게임에서 플레이어가 현재 깃발을 운반중인지 여부 등입니다. 모든 플레이어에 대한 PlayerState 는 (PlayerController 와는 달리) 모든 머신에 존재하며, 동기화 상태 유지를 위해 자유로이 리플리케이트 가능합니다.

프레임워크 클래스 관계

이 흐름도는 이러한 코어 게임플레이 클래스끼리의 상관 관계를 나타냅니다. 게임은 GameMode 와 GameState 로 이루어집니다. 게임에 참여하는 사람 플레이어는 PlayerController 에 연관됩니다. 이러한 PlayerController 는 플레이어가 레벨 내 물리적 존재를 가질 수 있도록 Pawn 에 빙의됩니다. PlayerController 는 플레이어에게 입력 컨트롤, 헤드업 디스플레이 (HUD), 카메라 시야 처리를 위한 PlayerCameraManager 등을 줄 수 있습니다.

GameFramework.png

게임플레이 프레임워크 클래스 관련 자세한 내용은 게임플레이 프레임워크 문서를 참고하세요.

UE4 프로그래밍 시작을 위해서는 프로그래밍 퀵스타트 및 다른 C++ 프로그래밍 튜토리얼 문서를 참고하세요.

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼