멀티플레이어 프로젝트 설정

JM·2025년 3월 11일

게임 인스턴스

레벨 변경 또는 게임 세션 전반에 걸쳐 유지돼야 하는 고수준 데이터를 관리.
전역적으로 접근 가능한 UObject로, 게임에서 유지해야 하는 데이터를 모두 저장할 수 있다.
ex. 플레이어 점수 등

게임이 시작될 때 인스턴스화되고 게임이 종료될 때만 소멸된다.

이 게임 인스턴스를 런타임에 인스턴스화 되도록 프로젝트 설정에 추가한다.


게임 모드(AGameMode)

플레이어가 게임에 참가하는 방법, 레벨 간 전환 방법, 기타 게임별 설정과 같은 게임 규칙을 제어하는 클래스.
일반적으로 게임의 현재 상태를 관리하는 게임 스테이트(AGameState)클래스와 함께 사용한다.

AGameMode 클래스는 AGameModeBase를 확장해 게임 규칙과 승패 조건 같은 멀티플레이 시스템을 향상시키는 기능을 추가한다.

//PE_GameMode.h
public:
	APE_GameMode(); //게임모드 생성자
//PE_GameMode.cpp
#include "PE_GameMode.h"
#include "PE_GameState.h"

APE_GameMode::APE_GameMode() {
	//생성자
	GameStateClass = APE_GameState::StaticClass();
}

APE_GameState::StaticClass()APE_GameState의 클래스 정보를 UClass*로 반환한다.
이렇게 설정하면 언리얼 엔진이 게임 시작 시 해당 GameState 클래스를 인스턴스화한다.

게임 스테이트

게임의 현재 상태를 관리한다.


플레이어

플레이어 컨트롤러

플레이어의 입력장치로 들어온 입력을 관리하고, 캐릭터에게 명령을 보내 동작 수행
일반적으로 게임에서 플레이어를 나타내는 폰(Pawn) 클래스나 캐릭터(Character) 클래스를 제어하는데 사용한다.

플레이어 스테이트

모든 플레이어가 동일한 정보에 접근할 수 있도록 서버와 클라이언트 모두에 존재

플레이어 캐릭터

이전에 만들어둔 플레이어 캐릭터를 가져와서 사용하였다. TPS-플레이어


게임 모드 설정

앞에서 생성한 클래스들을 게임 모드에 추가해 준다.

//PE_GameMode.cpp
#include "PE_GameMode.h"
#include "PE_GameState.h"
#include "PE_PlayerController.h"
#include "PE_PlayerState.h"
#include "ProjectPlayer.h"
#include "UObject/ConstructorHelpers.h"

APE_GameMode::APE_GameMode() { //생성자
	GameStateClass = APE_GameState::StaticClass(); // 게임 스테이트
	PlayerStateClass = APE_PlayerState::StaticClass(); // 플레이어 스테이트
	PlayerControllerClass = APE_PlayerController::StaticClass(); // 플레이어 컨트롤러

	// 플레이어 캐릭터 블루프린트 가져오기
	static ConstructorHelpers::FClassFinder<APawn>PlayerPawnBPClass(TEXT("/Game/BluePrints/BP_ProjectPlayer"));
	if (PlayerPawnBPClass.Class != nullptr) {
		DefaultPawnClass = PlayerPawnBPClass.Class;
	}
}
static ConstructorHelpers::FClassFinder<APawn>PlayerPawnBPClass(TEXT("/Game/BluePrints/BP_ProjectPlayer"));

블루프린트 클래스는 C++ 클래스에서 직접 참조할 수 없으므로 ConstructorHelpers유틸리티 클래스에서 제공하는 FClassFinder구조체를 사용해 찾아야 한다.

하지만 파일이 이동되거나 삭제된다면...? 더좋은 방법을 찾는게 좋을 것 같다.

게임모드가 정상적으로 컴파일 되었으면 이렇게 적용이 된다.
라이브 코딩을 이용한 컴파일을 해도 적용되지 않아서 언리얼 에디터를 껐다 켜봤더니 적용되었다.


이 페이지의 내용은 "언리얼 엔진 5로 개발하는 멀티플레이어 게임(저자 : 마르코 세치)" 책을 참고하여 개인적인 공부를 목적으로 제작되어 틀린 내용이 있을 수 있습니다.

0개의 댓글