상세 컨텐츠

본문 제목

언리얼엔진4 프레임워크, 바탕 관련

게임엔진관련/언리얼 엔진

by AlrepondTech 2016. 5. 19. 22:57

본문

반응형

 

 

 

=================================

=================================

=================================

 

 

 

출처: https://docs.unrealengine.com/latest/KOR/Gameplay/Framework/index.html

 

다양한 게임 프레임워크 부분이 어떻게 서로 조합되는지를 보이기 위한 간단한 예제는 이렇습니다. 토끼와 달팽이가 경주를 하는 게임의 개념을 간단히 그려 봅시다. 게임 프레임워크의 바탕은 GameMode 입니다. GameMode 에서는 게임의 규칙을 설정, 여기서는 결승선을 먼저 통과하는 플레이어가 이기는 규칙입니다. 플레이어 스폰 처리도 여기서 합니다.

플레이어 셋업이 이루어지는 곳은 PlayerController 로, 이것이 Pawn 을 빙의(possess)합니다. Pawn 은 게임 내 플레이어의 물리적 표현인 반면, Controller 는 Pawn 에 빙의되어 그 동작에 대한 규칙을 설정할 수 있습니다. 우리 예제에서는 Pawn 이 둘 있는데, 하나는 달팽이이고 하나는 토끼입니다. 토끼는 사실상 Character 가 되는데, 이는 Pawn 의 특수한 서브클래스로 달리기나 점프같은 이동 함수성이 내장되어 있습니다. 반면 달팽이는 이동 방식이 다르기 때문에 Pawn 클래스를 직접 확장하면 됩니다.

Pawn 자체에 이동이나 기타 게임 로직용 규칙을 포함시킬 수는 있지만, 그러한 함수성은 Controller 에 포함시킬 수도 있습니다.Controller 는 사람 플레이어의 입력을 받는 PlayerController 아니면 컴퓨터의 자동 제어를 받는 AIController 가 될 수도 있습니다. 이 예제에서 플레이어는 달팽이를 제어할 것이기에, 달팽이 Pawn 은 PlayerController 에 빙의됩니다. 토끼는 AI 의 제어를 받는데, 언제 멈추고 달리고 낮잠을 잘 것인지 하는 규칙은 모두 AIController 에 설정되어 있으며, 이 콘트롤러가 토끼 Character 에 빙의됩니다. Camera 에 제공되는 시야는 사람 플레이어에게만 의미가 있으므로, 달팽이 Pawn 에 있는 CameraComponent 하나만 PlayerCamera 에 사용될 것입니다.

게임플레이 도중 플레이어에게 받은 Input 으로 맵 위의 달팽이를 이리저리 움직이면서, Camera 로 제공된 뷰 위에 겹쳐놓인 HUD 에 누가 처음으로 들어왔는지, 경과된 경주 시간은 얼마나 되는지가 표시됩니다.

이와 같은 것들은 게임 프레임워크 요소에 대한 매우 일반적인 설명일 뿐, 그에 관련된 콘텐츠, C++ 코드 및/또는 블루프린트를 자세히 배워보려면 아래 해당 게임플레이 프레임워크 요소에 대한 페이지를 살펴 보시기 바랍니다.

 

기본 프레임워크 요소

 

 

 

=================================

=================================

=================================

 

 

 

 

게임플레이 프레임워크 간단 참고서

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

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

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

 

Pawn 폰

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

Character 캐릭터

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

 

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

 

Controller

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

PlayerController

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

AIController

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

 

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

 

HUD

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

Camera 카메라

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

 

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

 

GameMode

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

GameState

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

PlayerState

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

 

프레임워크 클래스 관계

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

 

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

 

 

=================================

=================================

=================================

 

 

 

출처: https://docs.unrealengine.com/latest/KOR/Gameplay/Framework/GameMode/index.html

 

 

게임모드 (GameMode)

 

가장 제약이 없다는 게임일지라도 토대가 되는 규칙들이 있으며, 이러한 규칙들이 게임타입을 이룹니다. 가장 기본적인 레벨에서 이러한 규칙에 포함되는 것은 다음과 같습니다:

  • 존재하는 플레이어와 관람자의 수는 물론, 허용된 플레이어와 관람자 최대 수
  • 플레이어가 게임에 들어오는 방식에, 스폰 위치와 스폰/리스폰 동작 포함 가능
  • 게임 일시정지 가능 여부, 게임 일시정지 처리 방식
  • 게임을 시네마틱 모드에서 시작할지를 포함해서, 레벨간의 전환

모든 게임타입에 일정 정도 기본적인 요소가 공통되기는 하겠지만, 개발중인 게임 장르에 따라 무한한 변형이 있습니다. 일인칭 슈팅 게임에서 익숙한 게임타입에는 데스매치, 깃발뺐기, 최후의 일인 등이 있으며, 이러한 게임타입 선택은 종종 경기 셋업 도중의 메뉴 옵션에 나오는지라 확연히 보입니다. 롤플레잉 어드벤처 게임이나 플랫포머 게임같은 장르의 경우 게임타입의 다양성이나 명확성이 떨어질 수는 있지만, 여전히 게임의 조건 설정을 해 주고는 있습니다. 예를 들어 플레이어가 제한 시간 내 특정 지점에 도달하거나 "보스" 캐릭터를 무찌르면 레벨이 완료되는 경우를 들 수 있습니다. 조금 더 복잡한 경우라면, 던전 탐험 게임같은 것입니다. 메인 월드에는 게임의 진행상황이나 조건을 기록하는 대단히 중요한 게임타입이 있을 수 있습니다. 각 던전 안에는 해당 던전에만 국한된 게임타입을 통해, 각 던전마다 완벽히 고유성을 지녀 자체적인 규칙과 목적을 설정하도록 할 수 있습니다.

게임타입 관련 정보를 처리하는 클래스는 크게 GameMode 와 GameState, 두 가지 있습니다.

GameMode

AGameMode 클래스는 플레이중인 게임을 정의하고, 게임 규칙을 시행합니다. AGameMode 의 기본적인 함수성은:

게임 규칙을 설정하는 새로운 함수나 변수가 있으면 AGameMode 클래스의 서브클래스에 추가시켜야 합니다. 플레이어가 갖고 시작하는 인벤토리 아이템이나 시간 제한 내에 몇 번의 생명이 가능한지, 게임을 끝내는 데 몇 점이나 필요한지 등이 GameMode 에 속합니다. AGameMode클래스의 서브클래스를 게임이 포함시켜야 하는 각 게임타입에 대해 생성해 줘야 할 수도 있습니다. 한 게임에 게임타입 즉 AGameMode 클래스의 서브클래스가 다수 있을 수 있으나, 어느 때고 사용되는 게임타입은 단 하나만 가능합니다. GameMode 액터는 레벨이UGameEngine::LoadMap() 를 통해 게임용으로 초기화될 때마다 인스턴싱됩니다. 이 액터가 정의하는 게임타입이 그 레벨이 지속되는 동안 사용될 것입니다.

경기 상태

GameMode 에는 Match (경기), 또는 일반적인 게임플레이 흐름 상태를 기록하는 스테이트 머신이 들어있습니다. 현재 상태에 대한 질의를 위해서는 GetMatchState, 또는 HasMatchStarted, IsMatchInProgress, HasMatchEnded 와 같은 wrapper 를 사용하면 됩니다. 가능한 경기 상태는 다음과 같습니다:

  • EnteringMap (맵 입장중)은 초기 상태입니다. 액터 틱은 아직 진행되지 않으며, 월드 초기화도 완전히 끝나지 않았습니다. 전체 로드가 끝나면 다음 상태로 넘어갈 것입니다.
  • WaitingToStart (시작 대기중)이 다음 상태로, 들어서면 HandleMatchIsWaitingToStart (경기 시작 대기중 처리)가 호출됩니다. 액터 틱은 진행되지만, 아직 플레이어는 스폰되지 않습니다. ReadyToStartMatch (경기 시작 준비 완료)가 True 를 반환하거나 누군가 StartMatch (경기 시작)을 호출하면 다음 상태로 넘어갑니다.
  • InProgress (진행중)이 다음 상태로, 들어서면 HandleMatchHasStarted (경기 시작됨 처리)가 호출되고, 모든 액터에서 BeginPlay (플레이 시작)이 호출됩니다. 일반적인 게임플레이가 진행됩니다. ReadyToEndMatch (경기 종료 준비 완료)가 True 를 반환하거나 누군가 EndMatch (경기 종료)를 호출하는 경우 다음 상태로 넘어갑니다.
  • WaitingPostMatch (경기 후 대기중)이 다음 상태로, 들어서면 HandleMatchHasEnded (경기 종료됨 처리)가 호출됩니다. 액터 틱은 여전히 진행되지만 새로운 플레이어를 받지 않습니다. 맵 전환이 시작되면 다음 상태로 넘어갑니다.
  • LeavingMap (맵 나가기)가 마지막 상태로, 들어서면 HandleLeavingMap (맵 나가기 처리)가 호출됩니다. 새로운 맵으로 전환되는 와중에 경기는 이 상태가 유지됩니다.
  • Aborted (중단됨)은 실패 상태로, AbortMatch (경기 중단)을 통해 시작됩니다. 회복할 수 없는 오류가 있을 때 설정됩니다.

기본적으로 경기 상태는 항상 InProgress (진행중)일 것입니다만, 각 게임마다 이러한 행위를 덮어써서 좀 더 복잡한 규칙의 멀티플레이어 게임을 만들 수도 있습니다.

GameMode 파생 블루프린트

GameMode 는 Blueprintable, 블루프린트 가능 클래스입니다. GameMode 에서 파생시켜 블루프린트 를 생성할 수 있으며, 이 블루프린트를 프로젝트나 레벨의 기본 게임 모드로 사용할 수도 있습니다.

GameMode 에서 파생되는 블루프린트는 다음과 같은 기본값 설정이 가능합니다:

  • Default Pawn 클래스
  • HUD 클래스
  • Player Controller 클래스
  • Spectator 클래스
  • Game State 클래스
  • Player State 클래스

GameMode 설정

레벨의 GameMode 설정을 위한 메소드는 여러가지 있습니다. 여기서는 우선권이 가장 낮은 것에서부터 높은 것으로 나열해 보겠습니다:

  • DefaultGame.ini 파일의 /Script/Engine.WorldSettings/ 섹션에 GlobalDefaultGameMode 항목으로 설정해 주면 프로젝트의 모든 맵에 대한 기본 게임 모드를 설정합니다.
  • [/Script/Engine.WorldSettings] GlobalDefaultGameMode="/Script/MyGame.MyGameGameMode" GlobalDefaultServerGameMode="/Script/MyGame.MyGameGameMode"
  • 개별 맵에 대해 프로젝트 세팅을 덮어쓰려면, 에디터에서 World Settings 의 Default Game Mode 를 설정합니다.
  • URL 을 실행파일에 붙여 게임 시작시 로드할 맵을 강제 지정할 수 있습니다. game 옵션을 사용하여 게임 모드를 설정할 수 있습니다. 자세한 정보는 명령줄 인수 문서를 참고하시기 바랍니다.
  • UE4Editor.exe /Game/Maps/MyMap?game=MyGameMode -game
  • 마지막으로 DefaultGame.ini 파일의 /Script/Engine.WorldSettings/ 섹션에 맵 접두사를 설정할 수 있습니다. 이 접두사는 접두사가 붙은 모든 맵에 대한 기본 게임 모드를 설정합니다.
  • [/Script/Engine.WorldSettings] +DefaultMapPrefixes=(Prefix="DM",GameMode="UTGame.UTDeathmatch")

Game Mode 셋업 예제는 게임 모드 구성 문서를 참고하세요.

 

 

 

 

=================================

=================================

=================================

 

 

 

게임 모드 구성

GameMode (게임 모드)는 게임의 규칙 세트를 정의합니다. 그 규칙에는 플레이어의 게임 참가, 게임 일시정지, 레벨 전환 방식은 물론, 승리 조건과 같은 게임 전용 작동방식이 포함됩니다. GameMode 는 각 레벨별로 설정되며, 다수의 레벨에서 재사용 가능합니다.

아래 구성 부분의 링크를 통해 블루프린트를 사용해서 게임 모드 구성 비법 예제를 살펴볼 수 있습니다.

구성

블루프린트를 사용한 게임 모드 구성 방법 관련 상세 정보는, 아래 링크를 참고하세요:

 

 

=================================

=================================

=================================

 

 

 

GameState

 

GameState (게임스테이트)는 클라이언트의 게임 상태 모니터링을 담당합니다.

개념적으로는, 게임스테이트란 게임의 상태로 간주됩니다. 점수, 접속된 플레이어 목록, 깃발뺏기 게임에서 제한 횟수, 체크 게임에서 말의 위치, 오픈 월드 게임에서 완료한 퀘스트 등의 속성을 기록하고 유지합니다. 일반적으로 게임스테이트는 게임플레이 도중 변하는 프로퍼티를 추적합니다. 게임스테이트는 서버와 모든 클라이언트에 존재하며, 모든 머신의 최신 상태 유지를 위해 자유로이 리플리케이트 가능합니다.

 

 

=================================

=================================

=================================

 

 

블루프린트로 게임 모드 구성

 

여기서는 게임모드 블루프린트 를 만드는 법과 그 기본값을 설정하는 방법, 게임에 디폴트 게임모드 할당 방법, 월드 세팅 및 게임모드 덮어쓰기 옵션을 통해 디폴트 게임모드를 덮어쓰는 방법을 다룹니다.

게임 모드 블루프린트 만들기

게임 모드 블루프린트를 만들고 구성하는 방법은 다음과 같습니다.

이 예제에서는 블루프린트 삼인칭 템플릿 을 사용하지만, 아무 프로젝트나 사용해도 됩니다.

 

  1. 콘텐츠 브라우저에서  버튼을 누릅니다.
  2. 뜨는 메뉴의 기본 애셋 생성 섹션 아래에서 블루프린트 를 선택합니다.
  3. 고급 애셋 생성 아래 블루프린트 옵션에서 추가적인 블루프린트 유형 생성이 가능합니다.
  4. 블루프린트 의 부모 클래스 를 선택합니다.
  5. 부모 클래스 선택 관련 정보는 블루프린트 클래스 문서를 참고하세요.

부모 클래스 선택 창에서 Game Mode (게임 모드) 클래스를 선택합니다.

게임 모드 디폴트 편집

  1. 블루프린트에 더블클릭 하여 연 다음, 클래스 디폴트   버튼을 클릭하여 디테일 패널에서 블루프린트 디폴트를 엽니다.
  2. 게임 모드 아래에는 게임의 기본 세팅으로 설정할 수 있는 (기본 캐릭터, HUD 등의) 옵션이 여러가지 있습니다.

    게임 모드 블루프린트는 기존의 CharacterHUDPlayerControllerSpectatorGame State 클래스의 블루프린트를 가리키고 있습니다. 실제로 게임에서 사용하기 위해서는 각각을 별도로 만든 다음 게임 모드 블루프린트에서 사용하도록 지정해 줘야 합니다.

  3. 여기서는 ThirdPersonCharacter 라는 캐릭터 블루프린트를 게임에서 플레이어가 사용할 Default Pawn Class 로 할당하고 있습니다.

디폴트 게임 모드 할당하기

기존 섹션에서는 게임 모드 블루프린트를 만들었습니다. 게임 모드 블루프린트가 생겼으니, 게임에서 사용할 디폴트 게임 모드 로 할당할 수 있습니다. 아래 단계에서는 프로젝트 세팅 옵션을 통해 디폴트 게임 모드 를 할당하는 방법을 안내해 드립니다.

  1. 메인 에디터 창에서, 메뉴 바의 편집 버튼을 클릭한 다음 프로젝트 세팅 을 선택합니다.
  2. 프로젝트 세팅 창에서 맵 & 모드 옵션을 클릭합니다.
  3. 맵 & 모드 의 Default Modes 아래, Default GameMode 드롭다운 박스를 클릭한 다음 사용하고자 하는 게임 모드 를 할당합니다.
  4. 그러면 프로젝트가 로드될 때마다 선택한 게임 모드 가 디폴트 게임 모드 로 선택됩니다.
  5. 선택된 게임 모드 옆의 화살표를 클릭하면, 할당된 게임 모드 에 사용되는 현재 세팅이 보입니다.
  6. 여기서는 ThirdPersonCharacter 가 Default Pawn Class 로 사용되는 것을 볼 수 있습니다.

디폴트 게임 모드 덮어쓰기

디폴트 게임 모드 가 할당되어 있는 상태에서, 월드 세팅 의 GameMode Override 옵션을 통해 레벨 단위로 덮어쓸 수 있습니다. 여기서는 디폴트 게임 모드를 덮어쓰는 방법을 보여드리겠습니다.

  1. 메인 에디터 창에서 툴바의 월드 세팅 버튼을 클릭합니다.
  2. 디테일 탭이 위치한 우하단 창에 월드 세팅 옵션이 나타납니다.
  3. 월드 세팅 내 Game Mode 아래, GameMode Override 드롭다운 박스를 클릭하여 사용되는 게임 모드 를 바꿀 수 있습니다.
 
 

 

=================================

=================================

=================================

 

 

 

 

 

 

반응형


관련글 더보기

댓글 영역