언리얼 엔진의 기초를 배울 때는 언리얼 게임플레이 프레임워크의 작동 방식을 익혀야 합니다. 이 문서에서는 패럿의 게임 모드와 게임 스테이트 클래스를 구성하는 방법을 설명합니다.
게임 모드
게임 모드는 플레이어 수나 플레이어가 게임에 참여하는 방법과 같은 기본적인 플레이 규칙을 정의하는 역할을 합니다. 또한, 게임 스테이트, 플레이어 컨트롤러, HUD, 디폴트 폰 클래스 같은 유용한 게임 클래스를 구성하기 위한 프레임워크도 제공합니다.
패럿의 게임 모드를 구성하는 단계는 다음과 같습니다.
콘텐츠 브라우저(Content Browser)에서 콘텐츠(Content) > 블루프린트(Blueprints) > 게임(Game)을 클릭합니다.
브라우저에서 우클릭하고 블루프린트 클래스(Blueprint Class)를 클릭합니다.
부모 클래스를 AGameModeBase로 설정합니다.
클래스 이름을 'BP_ParrotGameMode'로 지정합니다.
새로 생성된 블루프린트를 더블클릭하여 정의된 핵심 클래스를 확인합니다. 패럿의 경우 이러한 클래스 중 일부를 변경해야 합니다.
게임 스테이트 클래스(Game State Class)는 BP_ParrotGameState로 설정해야 합니다.
플레이어 컨트롤러 클래스(Player Controller Class)는 BP_ParrotPlayerController로 설정해야 합니다.
HUD 클래스(HUD Class)는 BP_ParrotHUD로 설정해야 합니다.
디폴트 폰 클래스(Default Pawn Class)는 BP_ParrotPlayerCharacter로 설정해야 합니다.
편집(Edit) > 프로젝트 세팅(Project Settings) > 맵 & 모드(Maps & Modes)로 이동하여 기본 게임 모드(Default GameMode)를 BP_ParrotGameMode로 설정합니다.
이제 게임 모드가 구성되었으므로 게임 스테이트를 구성할 수 있습니다.
게임 스테이트
게임 스테이트는 현재 게임에서 일어나는 일을 처리합니다. 클라이언트가 알아야 하는 정보를 관리하지만, 특정 플레이어에 연결되어 있지는 않습니다. 예를 들어, 팀 점수를 여기에 저장할 수 있습니다.
패럿의 게임 스테이트를 생성하는 단계는 다음과 같습니다.
메인 에디터에서 툴(Tools) > 새 C++ 클래스...(New C++ Class...)를 선택합니다.
부모 클래스를 AGameStateBase로 설정합니다.
클래스 이름을 'AParrotGameState'로 지정합니다.
콘텐츠 브라우저에서 + 추가(+ Add) > 블루프린트 클래스(Blueprint Class)를 클릭합니다.
부모 클래스를 AParrotGameState로 설정합니다.
클래스 이름을 'BP_ParrotGameState'로 지정합니다.
게임 모드 블루프린트에서 게임 스테이트 필드에 BP_ParrotGameState를 할당합니다.
게임 모드 및 게임 스테이트 개념 리뷰
게임 모드와 게임 스테이트에 대한 자세한 내용은 게임 모드 및 게임 스테이트를 참조하세요. 개발 과정에서 새로운 클래스가 생성되므로 잊지 말고 게임 모드와 게임 스테이트를 업데이트해야 합니다.
맵별로 게임 모드를 설정할 수도 있습니다. 패럿의 메인 메뉴는 게임 내 레벨에서 사용하는 게임 모드와는 다른 게임 모드를 사용합니다.
게임 인스턴스
게임 인스턴스는 프로젝트별 함수 기능을 처리하는 엔진의 단일 퍼시스턴트 클래스 인스턴스입니다. 게임 인스턴스는 애플리케이션의 전체 수명 동안 존재하며, 게임의 뷰포트 클라이언트와 로컬 플레이어를 포함합니다.
게임 모드 및 스테이트와 동일한 패턴에 따라, 베이스 C++ 클래스인 UParrotGameInstance와 블루프린트 클래스인 BP_ParrotGameInstance를 생성합니다. 프로젝트용 게임 인스턴스 클래스는 편집(Edit) -> 프로젝트 세팅(Project Settings) -> 맵 & 모드(Maps & Modes)에서 설정할 수 있습니다.
패럿용 게임 인스턴스를 생성하는 단계는 다음과 같습니다.
메인 에디터에서 툴(Tools) > 새 C++ 클래스...(New C++ Class...)를 선택합니다.
부모 클래스를 UGameInstance로 설정합니다.
클래스 이름을 'UParrotGameInstance'로 지정합니다.
콘텐츠 브라우저에서 + 추가(+ Add) > 블루프린트 클래스(Blueprint Class)를 클릭합니다.
부모 클래스를 UParrotGameInstance로 설정합니다.
클래스 이름을 'BP_ParrotGameInstance'로 지정합니다.
편집(Edit) -> 프로젝트 세팅(Project Settings) -> 맵 & 모드(Maps & Modes)로 이동하여 게임 인스턴스 클래스(Game Instance Class)를 BP_ParrotGameInstance로 설정합니다.
레벨 스트리밍 예시
패럿에서는 게임 모드에 따라 맵이 각기 다르며, 게임 인스턴스는 UParrotMapDataAsset 파일을 사용하여 로드할 맵을 게임에 알려줍니다. 이러한 파일은 맵 파일에 대한 소프트 오브젝트 포인터가 포함된 데이터 에셋입니다. 이러한 에셋은 게임 인스턴스에 구성되어 있으며 플레이어가 게임을 진행함에 따라 순환할 수 있습니다. 이 에셋이 게임 인스턴스에 있으므로 언제 어디서나 다음 레벨을 스트리밍할 수 있습니다. 플레이어 컨트롤러는 게임 스테이트 변경을 수신한 다음 필요에 따라 게임 인스턴스를 호출합니다.
다음 스크린샷은 Stream Level 노드 및 Async Load Asset 노드를 사용하여 ParrotMapDataAsset에 대한 소프트 오브젝트 레퍼런스를 비동기식으로 로드하는 블루프린트를 보여줍니다. 그런 다음, 레벨이 이미 로드되었으므로 동기화 로드를 기다릴 필요 없이 Open Level 노드를 호출합니다. 여기에는 CommonLoadingScreen 플러그인도 사용됩니다. 로딩 화면 위젯은 다음 맵의 프리 로드 중에 호출되고 포스트 로드 중에 제거됩니다.
로딩 화면에 대한 자세한 내용과 여기서 패럿이 동기화 로드가 아닌 비동기 로드를 수행하는 이유는 패럿의 유저 인터페이스 문서를 참조하세요.