본문 바로가기

레퍼런스

게임플레이 프레임워크

게임 규칙, 플레이어 입력과 컨트롤, 카메라, 유저 인터페이스 등의 코어 시스템을 살펴봅니다.
언리얼 엔진의 게임플레이 프레임워크는 프로젝트의 빌딩 블록 역할을 하는 여러 클래스와 컴포넌트를 제공합니다.

레벨에 배치하거나 스폰할 수 있는 오브젝트의 기본 클래스는 액터 입니다. 액터에는 액터의 이동 방식과 렌더링 방식을 제어하는 데 사용할 수 있는 액터 컴포넌트 컬렉션이 포함될 수 있습니다. 액터는 플레이 도중 네트워크를 통해 프로퍼티 및 함수 호출의 리플리케이션을 지원합니다.

카메라는 플레이어가 월드를 보는 방식과 같은 플레이어의 시점을 나타냅니다. 플레이어 컨트롤러는 카메라 클래스를 지정하고 플레이어가 월드를 보는 위치와 방향을 계산하는 데 사용되는 카메라 액터를 인스턴스화합니다.

폰 클래스는 플레이어 또는 AI가 제어할 수 있는 모든 액터의 베이스 클래스입니다. 폰은 월드 내에서 플레이어 또는 AI 엔티티의 물리적 표현입니다. 캐릭터는 걸어 다닐 수 있는 특수한 유형의 폰입니다. 기본적으로 컨트롤러와 폰은 일대일 관계로, 각 컨트롤러는 주어진 시간에 하나의 폰만 제어할 수 있습니다.

컨트롤러는 캐릭터처럼 폰 또는 폰에서 파생된 클래스를 빙의하여 그 동작을 제어할 수 있는 비물리적 액터입니다. 플레이어 컨트롤러는 인간 플레이어가 폰을 제어하는 데 사용되며, AI 컨트롤러는 자신이 제어하는 폰의 인공 지능을 구현하는 데 사용됩니다. 컨트롤러는 Possess 함수를 사용하여 폰을 제어하고, UnPossess 함수를 사용하여 폰의 제어권을 포기할 수 있습니다.

게임플레이 타이머는 지연 후 또는 일정 시간 동안 이벤트를 트리거하는 특정 함수 포인터에 대한 비동기 콜백을 생성합니다.

게임 프레임워크의 베이스는 게임모드입니다. 레벨이 게임플레이를 위해 초기화될 때 AGameModeBase 액터가 인스턴스화됩니다. 게임모드는 게임의 규칙을 설정하며, 서버에만 인스턴스화되고 클라이언트에는 존재하지 않습니다.

게임 기능 및 모듈형 게임플레이 플러그인은 개발자가 프로젝트에 독립형 기능을 만들 수 있도록 도와줍니다. 이러한 플러그인은 프로젝트의 코드베이스를 깔끔하고 읽기 쉽게 유지하며 관련 없는 기능 간의 우발적인 상호 작용이나 종속성을 방지합니다.

사용자 인터페이스(UI) 및 헤드업 디스플레이(HUD)는 플레이어에게 게임에 대한 정보를 제공하고 경우에 따라 플레이어가 게임과 상호 작용할 수 있도록 하는 방식입니다.

프레임워크 클래스 관계
이 플로차트는 이러한 핵심 게임플레이 클래스가 서로 어떻게 연관되어 있는지 보여줍니다. 게임은 GameMode와 GameState로 구성됩니다. 게임에 참여하는 인간 플레이어는 PlayerController와 연관됩니다. 이러한 PlayerController를 통해 플레이어는 게임에서 폰에 빙의하여 레벨에 물리적으로 표현할 수 있습니다. 플레이어 컨트롤러는 또한 플레이어에게 입력 컨트롤, 헤드업 디스플레이 또는 HUD, 카메라 뷰 처리를 위한 PlayerCameraManager를 제공합니다.

 

게임플레이 프레임워크 퀵 레퍼런스

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

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

월드에 플레이어, 아군, 적군 표시
클래스 설명
Pawn 폰이란 월드의 대리인 역할을 하는 Actor 입니다. Pawn 은 Controller 에 의해 possess(빙의) 가능하며, 입력을 쉽게 받을 수 있도록 구성 가능하고, 여러가지 다양한 플레이어같은 동작을 할 수 있습니다. 참고로 Pawn 은 인간형이라 가정되지 않습니다.
Character A 게임플레이 프레임워크 인간형 Pawn 입니다. 기본적으로 콜리전에 쓸 CapsuleComponent 와 CharacterMovementComponent 가 들어있습니다. 기본적인 인간형 동작을 할 수 있으며, 네트워크를 통해 부드러운 이동 리플리케이션이 가능하고, 애니메이션 관련 함수성도 약간 있습니다.
플레이어 입력 또는 AI 로직으로 폰 제어하기

 

클래스 설명
Controller 컨트롤러는 Pawn 에 대한 지시를 담당하는 Actor 입니다. 보통 두 가지 형태로 등장하는데, AIController 와 PlayerController 입니다. 컨트롤러는 Pawn 에 "possess"(빙의)되어 그 폰을 제어할 수 있습니다.
PlayerController A 플레이어 컨트롤러는 Pawn 과 그것을 제어하는 사람 플레이어를 잇는 인터페이스입니다. PlayerController는 본질적으로 사람 플레이어의 의지를 나타냅니다.
AIController AIController는 말 그대로 Pawn 을 제어하는 의지를 시뮬레이션으로 재현한 것입니다.

 

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

 

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

 

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

 

클래스 설명

GameMode "게임" 개념은 두 개의 클래스로 나뉩니다. 게임 모드와 게임 스테이트는 게임의 규칙이나 승리 조건같은 것이 포함된 게임의 정의로, 서버에만 존재합니다. 보통은 플레이 도중 바뀌는 데이터는 많이 없어야 하며, 클라이언트에서 알아야 하는 트랜션트(휘발성) 데이터는 반드시 없어야 할 것입니다.
GameState GameState에는 접속된 플레이어 목록, 점수, 체크 게임에서 말들의 위치, 오픈 월드 게임에서 완료한 퀘스트 목록 등과 같은 것이 포함될 수 있는 게임 상태가 포함됩니다. GameState 는 서버와 모든 클라이언트에 존재하며, 최신 상태 유지를 위해 자유롭게 리플리케이트 가능합니다.
PlayerState 인간 플레이어 또는 플레이어인 척 하는 봇과 같은 게임 참여자의 상태를 말합니다. 게임의 일부로써 존재하는 플레이어가 아닌 AI 에는 PlayerState 가 없습니다. PlayerState 에 적합한 예제 데이터라면, 플레이어 이름, 점수, MOBA 게임류에서의 대전상대 레벨, CTF 게임에서 플레이어가 현재 깃발을 운반중인지 여부 등입니다. 모든 플레이어에 대한 PlayerState 는 (PlayerController 와는 달리) 모든 머신에 존재하며, 동기화 상태 유지를 위해 자유로이 리플리케이트 가능합니다.

 

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