Photon PUN2 : Lobby / Room
Photon 네트워크의 전체 흐름 요약
Photon PUN2에서 클라이언트는 다음과 같은 흐름으로 네트워크에 참여한다.
Photon Server Connect → Lobby → Room → InGame
- Lobby: 방 목록을 조회하고, 방을 고르는 대기 공간
Room: 실제로 플레이어들이 모여 동기화된 게임을 진행하는 공간
Lobby
Lobby는 말 그대로 방 목록을 관리하는 대기 공간이다.
- 현재 열려 있는 Room 목록을 서버로부터 전달받는다
- 플레이어는 여기서
- 새로운 Room을 생성하거나
- 기존 Room에 참가한다
Lobby에 들어갔다고 해서 다른 플레이어와 동기화가 되는 것은 아니다.
Lobby는 매칭을 위한 공간일 뿐이다.
| 동기화 | X 없음 |
| 게임 로직 | X 실행 불가 |
| Room 목록 | O 조회 가능 |
| Player 간 상호작용 | X 없음 |
Lobby 관련 주요 메서드
PhotonNetwork.ConeectUsingSettings();
PhotonNetwork.JoinLobby();
PhotonNetwork.LeaveLobby();
Lobby 콜백
public override void OnConnectedToMaster()
{
PhotonNetwork.JoinLobby();
}
public override void OnJoinedLobby()
{
Debug.Log("Lobby 입장 완료");
}
public override void OnRoomListUpdate(List<RoomInfo> roomList)
{
// 현재 존재하는 방 목록
// 방이 생성/삭제될 때마다 호출
// 로비 UI에서 방 목록 갱신에 사용
}
Room
Room은 실제 게임이 진행되는 공간이다.
- Player들이 모여 있음
- Transform, RPC, 이벤트 등이 동기화됨
- 게임 로직이 실행됨
멀티플레이의 실체는 Room 안에서만 존재한다.
| 동기화 | O 가능 |
| RPC | O 가능 |
| Player 정보 | O 관리 |
| 게임 진행 | O |
Room 생성 및 참가
PhotonNetwork.CreateRoom(roomName, new RoomOptions { MaxPlayers = 10 });
PhotonNetwork.JoinRoom(roomName);
PhotonNetwork.JoinRandomRoom();
etc...
RoomOptions 주요 항목
옵션설명
| MaxPlayers | 최대 인원 |
| IsOpen | 신규 참가 허용 여부 |
| IsVisible | 로비에 노출 여부 |
| CustomRoomProperties | 방 커스텀 데이터 |
| PlayerTtl | 플레이어 재접속 허용 시간 |
Room 콜백 흐름
public override void OnCreatedRoom() {}
public override void OnJoinedRoom() {}
public override void OnPlayerEnteredRoom(Player newPlayer) {}
public override void OnPlayerLeftRoom(Player otherPlayer) {}
public override void OnLeftRoom() {}
- CreateRoom 호출
- OnCreatedRoom
- OnJoinedRoom (방장도 호출됨)
- 다른 플레이어 입장
- OnPlayerEnteredRoom
Master Client
Room에는 항상 Master Client가 존재한다.
- 방을 처음 만든 플레이어
- 서버 권한 역할
- 방장이 나가면 자동 승계됨
PhotonNetwork.IsMasterClient
- 마스터 클라이언트 담당시키기 좋은 역할
- 게임 시작 트리거
- AI 스폰
- 라운드 관리
- 타이머 동기화
그 외
씬 이동 동기화
PhotonNetwork.AutomaticallySyncScene = true;
// 씬 로드 또한 씬매니져가 아닌 마스터 클라이언트에서 LoadLevel() 호출로 이동
RoomList는 실시간 전체 목록이 아니다
- Photon은 변경된 방 정보만 전달
- UI에서 이전 리스트를 직접 관리해야 함
'Unity' 카테고리의 다른 글
| Unity : Firebase 등록 및 Auth로 (이메일/소셜) 로그인 구현 (0) | 2026.01.11 |
|---|---|
| Unity Network : Photon Pun2 - PhotonView, IPunObservable, RPC (0) | 2026.01.07 |
| Unity UI: 코드로 레이아웃 제어 vs 프리팹 기반 구성 (0) | 2026.01.05 |
| 네트워크 : OSI, TCP/IP, Client-Server, P2P (1) | 2026.01.05 |
| 길찾기 알고리즘 : 다익스트라(Dijkstra) 와 에이스타(A*) (0) | 2025.11.20 |