unihee1의 블로그
[TIL] Unity 멀티 구현하기_ 2. 방 생성과 입장 본문
2025.08.26 - [Unity] - [TIL] Unity 멀티 구현하기_ 1. Photon 연결하기
[TIL] Unity 멀티 구현하기_ 1. Photon 연결하기
2025.08.18 - [Unity] - [TIL] Unity 멀티 구현 전 Photon에 대해 알아보기 [TIL] Unity 멀티 구현 전 Photon에 대해 알아보기1. Photon이란?멀티플레이 게임용 유니티 패키지로 유연한 매치메이킹을 통해 플레이어
unihee1.tistory.com
1. 개요
Unity와 Photon을 연결하는 데 성공했으니 이제 본격적으로 매칭 시스템을 구현해보려고 한다.
내가 만들 방식은 플레이어가 먼저 원하는 역할을 선택하고 그 역할에 맞게 방에 참가하는 구조이다.
2. 로비씬 만들기


이미지 UI로 BackGround를 만들고 Text로 Title 텍스트를 입력한 후 원하는 곳에 배치한다.
그런 다음 Button을 두개 만들어 배치하여 주면 간단하게 로비씬을 만들 수 있다.
3. LobbyManager 스크립트 작성하기
Farmer 역할 1명, Chicken 역할 4명 총 5명 플레이어가 모이면 Main씬으로 이동하도록 구현할 것이다.
우선 매칭 방식은 단순하게 이미 생성된 방이 있다면 참가하고 없다면 새로 방을 만들어주는 방식으로 진행할 것이다.
using Photon.Pun;
using Photon.Realtime;
using ExitGames.Client.Photon;
using UnityEngine;
public class LobbyManager : MonoBehaviourPunCallbacks
{
private string selectedRole;
private void Start()
{
PhotonNetwork.ConnectUsingSettings();
}
public void JoinRole(string role)
{
selectedRole = role;
PhotonNetwork.JoinRandomRoom();
}
public override void OnJoinRandomFailed(short returnCode, string message)
{
RoomOptions options = new RoomOptions();
options.MaxPlayers = 5;
options.CustomRoomProperties = new ExitGames.Client.Photon.Hashtable
{
{ "FarmerCount", 0 },
{ "ChickenCount", 0 }
};
options.CustomRoomPropertiesForLobby = new string[] { "FarmerCount", "ChickenCount" };
PhotonNetwork.CreateRoom(null, options);
}
public override void OnJoinedRoom()
{
var props = PhotonNetwork.CurrentRoom.CustomProperties;
int farmerCount = (int)props["FarmerCount"];
int chickenCount = (int)props["ChickenCount"];
if (selectedRole == "Farmer")
{
if (farmerCount >= 1)
{
PhotonNetwork.LeaveRoom();
return;
}
farmerCount++;
}
else
{
if (chickenCount >= 4)
{
PhotonNetwork.LeaveRoom();
return;
}
chickenCount++;
}
PhotonNetwork.CurrentRoom.SetCustomProperties(new ExitGames.Client.Photon.Hashtable
{
{ "FarmerCount", farmerCount },
{ "ChickenCount", chickenCount }
});
Debug.Log($"Joined as {selectedRole}");
if (farmerCount == 1 && chickenCount == 4 && PhotonNetwork.IsMasterClient)
{
PhotonNetwork.LoadLevel("GameScene");
}
}
}
- Start: PhotonNetwork.ConnectUsingSettings()을 호출해서 Photon 서버에 연결
- JoinRole(string role): 플레이어가 역할을 선택했을 때 호출되며 선택된 역할을 저장
- PhotonNetwork.JoinRandomRoom()을 실행해서 랜덤 방 참가를 시도
- 들어갈 수 있는 방이 없으면 OnJoinRandomFailed 호출
- OnJoinRandomFailed(short returnCode, string message): 랜덤 방 참가에 실패했을 때 새로운 방 만
- MaxPlayers: 5명
- CustomRoomProperties: FarmerCount = 0, ChickenCount = 0 초기값을 지정
- PhotonNetwork.CreateRoom()을 실행해서 방을 생성
- OnJoinedRoom(): 방에 성공적으로 참가했을 때 인원 체크 후 메인 씬을 로드
4. 버튼 On Click 이벤트 등록

만들어둔 버튼의 OnClick에 LobbyManager 스크립트가 붙은 오브젝트를 할당한 후 JoinRole 함수를 입력해준다.

그런 다읍 버튼 역할에 맞게 입력해주면 끝이다.
5. 결과


실행 하면 Photon 서버와 연결되고 각각의 버튼을 누르면 각 역할이 정확하게 선택된 것을 확인할 수 있다.
'Unity' 카테고리의 다른 글
| [TIL] 뒤끝 서버에 대해 알아보기 (0) | 2025.09.16 |
|---|---|
| [TIL] Unity 멀티 구현하기 _ 3. 트러블슈팅 (2) | 2025.08.28 |
| [TIL] Unity 멀티 구현하기_ 1. Photon 연결하기 (3) | 2025.08.26 |
| [TIL] Unity 아이템 상호작용 구현하기 (0) | 2025.08.22 |
| [TIL] Unity 공격, 데미지 받기 기능 구현하기 (0) | 2025.08.20 |