유니티 엔진 - 게임 프로젝트/데디케이트 기반 모바일 게임

로비 구현 - 최종) 다른 상대 탐색

monstro 2025. 12. 23. 11:28
728x90
반응형

- 개요

다른 상대를 탐색중인 클라이언트다른 클라이언트끼리 매칭되는 시스템을 완성한다

 

- 서버 + 클라이언트 공용

1) PacketType 클래스

 

서버에서 클라이언트로 전송하여 게임의 시작을 알리는 OnStartGame 패킷의 타입을 추가한다

 

2) Net_OnStartGame 클래스

 

INetPacket 인터페이스를 상속받아 게임의 시작을 알리는 Net_OnStartGame 패킷을 생성하였다

멤버변수의 구성은 위와 같다

  • Type 프로퍼티 : 해당 패킷의 타입을 설정
  • XUserName 프로퍼티 : 매칭을 시도한 플레이어의 이름
  • YUserName 프로퍼티 : 매칭된 상대 플레이어의 이름
  • GameId : 시작된 게임의 고유 아이디

 

 

Deserialize 함수는 위와 같이 정의하여 패킷을 역직렬화하여 가져온 값으로 프로퍼티를 설정한다

 

 

Serialize 함수는 위와 같이 정의하여 프로퍼티를 패킷에 작성하고 직렬화한다

 

- 서버 사이드

1) Game 클래스

 

진행중인 하나의 게임을 의미하는 Game 클래스를 생성한다

멤버변수의 구성은 위와 같다

  • Id 프로퍼티 : 해당 게임의 고유 아이디
  • Round 프로퍼티 : 해당 게임에서 진행중인 라운드 수
  • GameStartTime 프로퍼티 : 해당 게임의 시작 시간
  • CurrentRoundStartTime 프로퍼티 : 현재 라운드의 시작 시간
  • XUserName 프로퍼티 : 첫번째 플레이어의 이름
  • XUserWinCount 프로퍼티 : 첫번째 플레이어우승횟수
  • XWantRematch 프로퍼티 : 첫번째 플레이어재대결을 원하는지 여부
  • YUserName 프로퍼티 : 두번째 플레이어의 이름
  • YUserWinCount 프로퍼티 : 두번째 플레이어우승횟수
  • YWantRematch 프로퍼티 : 두번째 플레이어재대결을 원하는지 여부
  • CurrentUserName 프로퍼티 : 두명의 플레이어 중에서 게임을 대표하는 플레이어 이름

 

 

생성자는 위와 같이 구성하여 필요한 프로퍼티를 설정한다

 

2) GameManager 클래스

 

진행중인 Game들을 관리하는 GameManager 클래스를 생성한다

멤버변수는 위와 같이 Game 클래스를 저장하는 List를 갖고 있도록 하고

생성자에서 해당 멤버변수를 설정한다

 

 

RegisterGame 함수는 위와 같이 구성하여

인자로 받은 플레이어들의 이름을 사용하여 Game 인스턴스를 생성하고 List에 추가하고 인스턴스의 Guid를 반환한다

 

 

FindGame 함수는 위와 같이 구성하여 멤버변수에서 인자로 받은 플레이어의 이름이 포함된 Game을 반환한다

 

 

CloseGame 함수는 위와 같이 구성하여

인자로 받은 플레이어의 이름이 포함된 Game을 멤버변수에서 제거하고 해당 Game을 반환한다

 

 

GameExist 함수는 위와 같이 구성하여

인자로 받은 플레이어의 이름이 포함된 Game이 멤버변수에 존재하는지 여부를 반환한다

 

 

GetGameCount 함수는 위와 같이 구성하여 진행중인 게임의 수를 반환한다

 

3) Container 클래스

 

ConfigureServices 함수에서 GameManager에 대한 서비스를 생성한다

 

4) MatchMaker 클래스

 

멤버변수에 GameManagerNetworkServer를 추가하고 생성자에서 설정한다

 

 

DoMatchMaking 함수를 위와 같이 수정한다

  • 매칭된 두 플레이어새로운 Game에 입장시키고 두 플레이어의 GameId 값을 설정
  • 새로운 Net_OnStartGame 패킷을 생성하고 설정
  • 매칭된 두 플레이어의 ConnectionId를 가져와 패킷을 전송
  • 플레이어들의 매칭이 종료되면 멤버변수 컨테이너에서 지역 컨테이너의 데이터 제거

 

- 클라이언트 사이드

1) UI_Game 클래스

 

Game 씬에서 사용할 UI 클래스를 생성한다

 

2) OnStartGameHandler 클래스

 

서버로부터 받은 Net_OnStartGame 패킷을 핸들링하는 OnStartGameHandler 클래스를 생성한다

Handle 함수를 위와 같이 작성하여 Game 씬을 불러오도록 설정한다

 

- 최종 실행 결과

 

728x90
반응형