Showing

[Unreal Project] 싱글톤 패턴을 이용한 네트워크 플레이어 프로그래밍 본문

Unreal

[Unreal Project] 싱글톤 패턴을 이용한 네트워크 플레이어 프로그래밍

RabbitCode 2024. 1. 13. 12:43

세션 생성, 참가, 탐색

디폴트 맵에 들어갈 LobbyMap에 설정해줄 LoginGameModeBase에서 Login UI를 켜줄 것이고 이 UI는 네트워크 게임인스턴스를 가지고 있어 각종 네트워크 호출을 시도할 것이다.

로그인 게임모드가 로그인 UI를 들고 있고, 

이 위젯은 네트워크 게임 인스턴스 주소를 가지고 있다.(바로 뒤에 언급할 슬롯위젯도 가지고 있다)

로그인 위젯의 NativeConstruct 함수아래 버튼 이벤트 바인딩 뿐만 아니라

네트워크 게임 인스턴스 델리게이트에 함수를 바인딩해주어서

버튼 클릭에 따른 create

void ULoginWidget::OnClickedCreateButton()
{
	if (gi != nullptr) {
		gi->CreateSession(eText_roomName->GetText().ToString(), eText_hostName->GetText().ToString(), (int32)sl_maxPlayers->GetValue());
	}
}
void ULoginWidget::OnClickedMoveToFind()  // 0번에서 2번으로 바뀌는거
{
	ws_widgetSwicher->SetActiveWidgetIndex(2);
	if (gi != nullptr) {
		gi->FindSession();
	}
}
void ULoginWidget::OnClickedFindSessionsButton()
{
	//btn_findSessions->SetIsEnabled(false);
	if (gi != nullptr) {
		gi->FindSession();
		// 기존 슬록 위젯을 모두 지운다
		sb_roomList->ClearChildren();
	}
}

참고로 join은 세션 위젯에서 해주고 있고 따라서 세션 위젯도 gi를 가지고 있다.

기존 네트워크게임 인스턴스를 통해 세션 create, find, join등을 수행하고 있던 상황까지 개발이 진행되었고

추가적으로 게임 공통 타이머에 대한 구현이 필요한 상태이다.

Settings > Project Settings > Engine > General Settings > Default Classes Advanced 탭에 보면 Game Singleton Class

게임에 사용될 공통 데이터가 여러 객체에서 불리워진다면 각 개체 속성 간의 동기화 문제가 생긴다. 따라서 게임 내에서 단 하나의 개체임이 보장되어야 하므로 언리얼 싱글톤 클래스를 사용하여 엔진 초기화때부터 게임 종료까지 살아남는 공통 데이터를 관리할 수 있다.

- 언리얼 엔진에서 제공하는 싱글톤 클래스

(1)게임 인스턴스

(2)애셋 매니저

(3)게임 플레이 관련 액터(GameMode, GameState, …)