본문 바로가기
게임 공부/Unreal Engine

[UE4] 게임 인스턴스 및 게임 모드

by woohyeon 2022. 12. 17.
반응형

언리얼에서 게임을 실행하는 과정은 크게 다음과 같다.

1. 엔진 초기화
2. 게임 인스턴스(Game Instance) 생성 및 초기화
3. 월드 생성 및 레벨 로드
4. 플레이

엔진 초기화 이후 언리얼은 게임 인스턴스를 생성하고, 초기화 한다.

UGameInstance::Init()


게임 인스턴스는 하나의 게임을 관리하는 언리얼 오브젝트이며, 게임과 생명 주기를 함께 한다.
즉 게임이 실행되고 종료될 때까지 계속해서 접근이 가능하며, 중간에 그 메모리가 지워지지 않는다.

게임 인스턴스는 클라이언트 당 1개만 존재하는 것으로 알고 있다.
(2개 이상이 필요한 경우가 있는지, 있다면 어떤 경우인지 찾아 보았는데 찾지 못했다.) 

이후 월드를 생성하고 게임 모드를 시작하는데 다음과 같은 순서로 함수가 호출된다.

1. UWorld::BeginPlay()
2. AGameMode::StartPlay()

게임 모드는 언리얼에서 다음과 같이 설명하고 있다.

플레이중인 게임의 정보를 처리하는 클래스는 크게 Game Mode(게임 모드)와 Game State(게임 스테이트), 둘입니다. 플레이하는 데 필요한 플레이어 수, 그 플레이어가 게임에 참가하는 방식 등의 기본적인 요소들은 여러 유형의 게임에 공통이지만, 어떤 게임을 개발하는지에 따라 무한대의 규칙 변종이 가능합니다. 그 규칙과이 무엇이든, 그 정의와 구현은 게임 모드에 합니다.

오버워치로 예를 들면, 오버워치는 게임을 접속하고 매칭을 해야 실제 게임을 플레이 하게 된다. 매칭 전과 매칭 후 둘다 게임이라는 공간 안에 있지만, 게임 플레이 규칙 등을 생각해보면 큰 특징으로 구분 된다는 것을 느낄 수 있다. 이해를 돕기 위해 생각해보면, 이러한 특징으로 나누어 두 개의 게임 모드를 구성할 수도 있다.

이렇게 살펴 본 게임 인스턴스와 게임 모드는 필요에 따라 상속하여 사용한다.

게임 인스턴스는 UGameInstance 클래스를 상속하여 구현하고, 다음과 같이 언리얼의 Project Settings - Maps & Mode - Game Instance에서 우리가 구현한 게임 인스턴스 클래스를 지정해주어야 한다.

 

게임 모드는 World Settings의 GameMode 카테고리에 GameMode Override 부분에 우리가 구현한 게임 모드 클래스를 지정해준다. 게임 모드 셋팅은 레벨 마다 셋팅이 가능하다. 즉 레벨마다 게임 모드를 지정해주어야 한다. 하나의 게임에 여러 개의 게임 모드가 존재할 수 있지만 한 번에 하나의 게임 모드만 존재한다.

 

게임 모드의 베이스 클래스로, 언리얼 4.14 버전부턴 AGameModeBase라는 클래스가 도입 되었다고 한다. 

게임 모드 클래스 상속 관계

 

상속 관계는 위와 같은데, AGameMode를 단순화 및 효율화 시킨 버전이라고 한다. 

AGameMode 는 AGameModeBase 의 서브클래스로, 멀티플레이어 경기 및 기존 작동방식 지원을 위한 부가 함수가 몇 가지 들어있습니다. 새롭게 생성되는 프로젝트는 모두 AGameModeBase 를 기본 사용하지만, 그 부가 함수가 필요한 경우 AGameMode 를 상속하도록 전환할 수 있습니다. AGameMode 를 상속하는 경우, 경기 스테이트 머신도 지원하는 AGameState 에서 게임 스테이트를 상속하기도 해야합니다. AGameMode에는 경기 또는 일반 게임플레이 흐름 상태를 기록하는 스테이트 머신이 들어있습니다.

 

https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Framework/GameMode/




댓글