게임모드 (GameMode)
The GameMode is responsible for setting the rules of the game.
=================================
=================================
=================================
출처: 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 같은 게임플레이 클래스로 게임의 규칙을 설정하며, 게임 및 플레이어의 진행상황을 기록하기도 합니다.
이 클래스 모두 레벨에 배치하거나 필요할 때 스폰시킬 수 있는 액터 유형을 생성합니다.
이 흐름도는 이러한 코어 게임플레이 클래스끼리의 상관 관계를 나타냅니다. 게임은 GameMode 와 GameState 로 이루어집니다. 게임에 참여하는 사람 플레이어는 PlayerController 에 연관됩니다. 이러한 PlayerController 는 플레이어가 레벨 내 물리적 존재를 가질 수 있도록 Pawn 에 빙의됩니다. PlayerController 는 플레이어에게 입력 콘트롤, 헤드업 디스플레이 (HUD), 카메라 시야 처리를 위한 PlayerCameraManager 등을 줄 수 있습니다.
게임플레이 프레임워크 클래스 관련 자세한 내용은 게임플레이 프레임워크 문서를 참고하세요.
=================================
=================================
=================================
출처: https://docs.unrealengine.com/latest/KOR/Gameplay/Framework/GameMode/index.html
가장 제약이 없다는 게임일지라도 토대가 되는 규칙들이 있으며, 이러한 규칙들이 게임타입을 이룹니다. 가장 기본적인 레벨에서 이러한 규칙에 포함되는 것은 다음과 같습니다:
모든 게임타입에 일정 정도 기본적인 요소가 공통되기는 하겠지만, 개발중인 게임 장르에 따라 무한한 변형이 있습니다. 일인칭 슈팅 게임에서 익숙한 게임타입에는 데스매치, 깃발뺐기, 최후의 일인 등이 있으며, 이러한 게임타입 선택은 종종 경기 셋업 도중의 메뉴 옵션에 나오는지라 확연히 보입니다. 롤플레잉 어드벤처 게임이나 플랫포머 게임같은 장르의 경우 게임타입의 다양성이나 명확성이 떨어질 수는 있지만, 여전히 게임의 조건 설정을 해 주고는 있습니다. 예를 들어 플레이어가 제한 시간 내 특정 지점에 도달하거나 "보스" 캐릭터를 무찌르면 레벨이 완료되는 경우를 들 수 있습니다. 조금 더 복잡한 경우라면, 던전 탐험 게임같은 것입니다. 메인 월드에는 게임의 진행상황이나 조건을 기록하는 대단히 중요한 게임타입이 있을 수 있습니다. 각 던전 안에는 해당 던전에만 국한된 게임타입을 통해, 각 던전마다 완벽히 고유성을 지녀 자체적인 규칙과 목적을 설정하도록 할 수 있습니다.
게임타입 관련 정보를 처리하는 클래스는 크게 GameMode 와 GameState, 두 가지 있습니다.
AGameMode
클래스는 플레이중인 게임을 정의하고, 게임 규칙을 시행합니다. AGameMode
의 기본적인 함수성은:
게임 규칙을 설정하는 새로운 함수나 변수가 있으면 AGameMode
클래스의 서브클래스에 추가시켜야 합니다. 플레이어가 갖고 시작하는 인벤토리 아이템이나 시간 제한 내에 몇 번의 생명이 가능한지, 게임을 끝내는 데 몇 점이나 필요한지 등이 GameMode 에 속합니다. AGameMode
클래스의 서브클래스를 게임이 포함시켜야 하는 각 게임타입에 대해 생성해 줘야 할 수도 있습니다. 한 게임에 게임타입 즉 AGameMode
클래스의 서브클래스가 다수 있을 수 있으나, 어느 때고 사용되는 게임타입은 단 하나만 가능합니다. GameMode 액터는 레벨이UGameEngine::LoadMap()
를 통해 게임용으로 초기화될 때마다 인스턴싱됩니다. 이 액터가 정의하는 게임타입이 그 레벨이 지속되는 동안 사용될 것입니다.
GameMode 에는 Match (경기), 또는 일반적인 게임플레이 흐름 상태를 기록하는 스테이트 머신이 들어있습니다. 현재 상태에 대한 질의를 위해서는 GetMatchState, 또는 HasMatchStarted, IsMatchInProgress, HasMatchEnded 와 같은 wrapper 를 사용하면 됩니다. 가능한 경기 상태는 다음과 같습니다:
기본적으로 경기 상태는 항상 InProgress (진행중)일 것입니다만, 각 게임마다 이러한 행위를 덮어써서 좀 더 복잡한 규칙의 멀티플레이어 게임을 만들 수도 있습니다.
GameMode 는 Blueprintable, 블루프린트 가능 클래스입니다. GameMode 에서 파생시켜 블루프린트 를 생성할 수 있으며, 이 블루프린트를 프로젝트나 레벨의 기본 게임 모드로 사용할 수도 있습니다.
GameMode 에서 파생되는 블루프린트는 다음과 같은 기본값 설정이 가능합니다:
레벨의 GameMode 설정을 위한 메소드는 여러가지 있습니다. 여기서는 우선권이 가장 낮은 것에서부터 높은 것으로 나열해 보겠습니다:
DefaultGame.ini
파일의 /Script/Engine.WorldSettings/
섹션에 GlobalDefaultGameMode
항목으로 설정해 주면 프로젝트의 모든 맵에 대한 기본 게임 모드를 설정합니다.[/Script/Engine.WorldSettings] GlobalDefaultGameMode="/Script/MyGame.MyGameGameMode" GlobalDefaultServerGameMode="/Script/MyGame.MyGameGameMode"
game
옵션을 사용하여 게임 모드를 설정할 수 있습니다. 자세한 정보는 명령줄 인수 문서를 참고하시기 바랍니다.UE4Editor.exe /Game/Maps/MyMap?game=MyGameMode -game
DefaultGame.ini
파일의 /Script/Engine.WorldSettings/
섹션에 맵 접두사를 설정할 수 있습니다. 이 접두사는 접두사가 붙은 모든 맵에 대한 기본 게임 모드를 설정합니다.[/Script/Engine.WorldSettings] +DefaultMapPrefixes=(Prefix="DM",GameMode="UTGame.UTDeathmatch")
=================================
=================================
=================================
GameMode (게임 모드)는 게임의 규칙 세트를 정의합니다. 그 규칙에는 플레이어의 게임 참가, 게임 일시정지, 레벨 전환 방식은 물론, 승리 조건과 같은 게임 전용 작동방식이 포함됩니다. GameMode 는 각 레벨별로 설정되며, 다수의 레벨에서 재사용 가능합니다.
아래 구성 부분의 링크를 통해 블루프린트를 사용해서 게임 모드 구성 비법 예제를 살펴볼 수 있습니다.
블루프린트를 사용한 게임 모드 구성 방법 관련 상세 정보는, 아래 링크를 참고하세요:
=================================
=================================
=================================
GameState (게임스테이트)는 클라이언트의 게임 상태 모니터링을 담당합니다.
개념적으로는, 게임스테이트란 게임의 상태로 간주됩니다. 점수, 접속된 플레이어 목록, 깃발뺏기 게임에서 제한 횟수, 체크 게임에서 말의 위치, 오픈 월드 게임에서 완료한 퀘스트 등의 속성을 기록하고 유지합니다. 일반적으로 게임스테이트는 게임플레이 도중 변하는 프로퍼티를 추적합니다. 게임스테이트는 서버와 모든 클라이언트에 존재하며, 모든 머신의 최신 상태 유지를 위해 자유로이 리플리케이트 가능합니다.
=================================
=================================
=================================
여기서는 게임모드 블루프린트 를 만드는 법과 그 기본값을 설정하는 방법, 게임에 디폴트 게임모드 할당 방법, 월드 세팅 및 게임모드 덮어쓰기 옵션을 통해 디폴트 게임모드를 덮어쓰는 방법을 다룹니다.
게임 모드 블루프린트를 만들고 구성하는 방법은 다음과 같습니다.
이 예제에서는 블루프린트 삼인칭 템플릿 을 사용하지만, 아무 프로젝트나 사용해도 됩니다.
부모 클래스 선택 창에서 Game Mode (게임 모드) 클래스를 선택합니다.
기존 섹션에서는 게임 모드 블루프린트를 만들었습니다. 게임 모드 블루프린트가 생겼으니, 게임에서 사용할 디폴트 게임 모드 로 할당할 수 있습니다. 아래 단계에서는 프로젝트 세팅 옵션을 통해 디폴트 게임 모드 를 할당하는 방법을 안내해 드립니다.
디폴트 게임 모드 가 할당되어 있는 상태에서, 월드 세팅 의 GameMode Override 옵션을 통해 레벨 단위로 덮어쓸 수 있습니다. 여기서는 디폴트 게임 모드를 덮어쓰는 방법을 보여드리겠습니다.
=================================
=================================
=================================
언리얼4 Multi-Threading: How to Create Threads in UE4 (0) | 2016.05.22 |
---|---|
언리얼엔진4 게임플레이 디버거 관련 (0) | 2016.05.19 |
[링크]언리얼 개발 유용한 사이트 공유 (리소스, 튜토리얼 등) 관련 (1) | 2016.04.21 |
언리얼 FSocket으로 서버접속후 서버가 죽거나 서버가 disconnect 시킬때를 감지려면 어떻게 해야 하나요? (0) | 2016.03.22 |
언리얼 클라이언트 해상도에 따른 제작 설계 관련 (0) | 2016.02.17 |