유니티 엔진 - 게임 프로젝트/Photon을 사용한 멀티 플레이어 게임

UI 설정 - 2) PUN 프레임워크의 Lobby 구현

monstro 2026. 3. 24. 17:09
728x90
반응형

- 개요

PUN 프레임워크에서 Room을 생성하고 선택할 수 있는 공간인 Lobby를 구현한다

기존의 씬을 재구성하여 Lobby를 배치하고 UI를 추가하여 Lobby와 Room을 선택할 수 있도록 설계한다

 

- 스크립트 작업

1) GameManager 클래스

 

Photon 마스터 서버에 성공적으로 접속하면 호출하는 OnConnectedToMaster 함수에 로직을 추가하여

서버에 접속하면 Lobby가 존재하는 Scene으로 전환되도록 수정한다

 

 

Room 입장에 관련한 로직은 더 이상 메인 메뉴에서 수행하지 않으므로

OnJoinedRoom 함수와 OnJoinRandomFailed 함수는 제거한다

 

2) UI_Description 클래스

 

로비 씬에 배치된 각각 다른 게임 모드의 Room에 대한 설명 UI를 처리하는 UI_Description 클래스를 추가한다

IPointerEnterHandler 인터페이스와 IPointerExitHandler 인터페이스를 상속받아

해당 UI에 대한 마우스 커서의 진입이탈에 따라 세부 UI를 활성화 + 비활성화한다

 

3) LobbyManager 클래스

 

로비 씬에 배치된 Lobby들을 관리하는 LobbyManager 클래스를 추가한다

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

  • roomNumber 멤버변수 : Lobby를 통해 접속한 Room의 이름을 보여주는 UI
  • levelName 멤버변수 : Room에 접속하면 전환할 씬의 이름
  • currentLobby 멤버변수 : 선택한 Lobby
  • killCount 멤버변수 : KillCount 모드의 Room에 입장하는 Lobby
  • teamBattle 멤버변수 : TeamBattle 모드의 Room에 입장하는 Lobby 
  • noRespawn 멤버변수 : NoRespawn 모드의 Room에 입장하는 Lobby

 

 

로비 씬을 구성하는 4가지 버튼 UI에 바인드할 콜백함수들을 위와 같이 생성한다

  • BackToMenu 함수 : 메인 메뉴 씬으로 전환
  • JoinGameKillCount 함수 : KillCount 모드의 Lobby로 이동하는 함수
  • JoinGameTeamBattle 함수 : TeamBattle 모드의 Lobby로 이동하는 함수
  • JoinGameNoRespawn 함수 : NoRespawn 모드의 Lobby로 이동하는 함수

 

 

Lobby에 입장하면 호출하는 OnJoinedLobby 함수를 위와 같이 오버라이드하여

JoinRandomRoom 함수를 호출하여 비어있는 Room에 즉시 입장한다

 

 

JoinRandomRoom 함수를 호출하였지만 입장이 실패하면 호출하는 OnJoinRandomFailed 함수

위와 같이 오버라이드하여 currentLobby 값에 맞는 게임 모드의 Room을 직접 생성한다

 

 

JoinRandomRoom 함수를 호출하여 입장이 성공하거나, CreateRoom 함수으로 Room을 만든 직후

호출하는 OnJoinedRoom 함수를 오버라이드하여 접속한 Room의 이름을 표시하고

PhotonNetwork.LoadLevel 함수를 호출하여 모든 유저들이 levelName의 씬을 로드한다

 

- 최종 실행 결과

Kill Count 게임모드의 Lobby에 입장한 첫 번째 플레이어

 

Kill Count 게임 모드의 Lobby에 입장한 두 번째 플레이어

 

Team Battle 게임 모드의 Lobby에 입장한 세 번째 플레이어

728x90
반응형