- [Photon] 로비 및 방 생성2025년 05월 10일
- SiJun-Park
- 작성자
- 2025.05.10.:53
https://sijun1191.tistory.com/110
[Photon] 회원가입 및 로그인
Playfab과 Photon을 이용해서 회원가입을 만들 예정이다. https://assetstore.unity.com/packages/p/pun-2-free-119922 PUN 2 - FREE | 네트워크 | Unity Asset StoreGet the PUN 2 - FREE package from Photon Engine and speed up your game developme
sijun1191.tistory.com
위의 글을 이어서 이번에는 로비와 방을 생성하는 것을 구현 하였습니다.
Lobby Scene 위와 같이 로비를 구성 하였습니다.
Scroll View를 이용해서 방을 생성하면 알맞게 버튼 형식의 방을 생성하도록 하였습니다.
방을 만들기 위해서는 Room Name InputField와 Capacity InputField를 이용해서
방의 이름, 방의 수용량을 적은 후 방을 생성 하도록 구현을 하였습니다.
ROOM Button Scroll View에 뜰 Room의 버튼 입니다.
이름(현재 인원 / 전체 수용량)을 표시하도록 하였습니다.
private string RoomName; [SerializeField] Text RoomTitleText; public void OnEnterRoom() => PhotonNetwork.JoinRoom(RoomName); public void SetData(string roomName, int CurrentCount, int MaxCount) { RoomName = roomName; RoomTitleText.text = string.Format("{0} ( {1} / {2} )", roomName, CurrentCount, MaxCount); }
버튼 코드 입니다.
버튼을 클릭하면 해당 방에 접속하도록 하였고, 방을 생성하면 정보가 필요하니 SetData라는 함수를 만들어서
버튼 안의 텍스트를 변경하도록 하였습니다.
public void Start() => PhotonNetwork.ConnectUsingSettings(); public override void OnJoinedRoom() => Debug.Log("조인!"); public override void OnConnectedToMaster() { PhotonNetwork.JoinLobby( new Photon.Realtime.TypedLobby( "ASIA", LobbyType.Default ) ); } public void OnCreateRoom() { RoomOptions roomOptions = new RoomOptions(); roomOptions.MaxPlayers = byte.Parse(RoomCapacityInputField.text); roomOptions.IsOpen = true; roomOptions.IsVisible = true; PhotonNetwork.CreateRoom(RoomNameInputField.text, roomOptions ); }
로비 씬으로 넘어오면 ConnectUsingSettings을 불러와서 OnConnectedToMaster를 연결 해줍니다.
이때 새로운 로비를 만드니 아시아 서버로하고 타입을 default로 선언해주었습니다.
OnCreateRoom은 앞서 언급을 하였듯이 InputField의 값을 받아와서 방을 생성해줍니다.
public GameObject InstantiateRoom() => Instantiate(Resources.Load<GameObject>("Room"), Parent); public override void OnRoomListUpdate(List<RoomInfo> roomList) { GameObject roomPrefab; foreach (RoomInfo room in roomList) { if(room.RemovedFromList == true) { // ROOM 이 삭제가 된 경우 DIC.TryGetValue(room.Name, out roomPrefab); Destroy(roomPrefab); DIC.Remove(room.Name); } else { // ROOM의 정보가 변경이 된 경우 if(DIC.ContainsKey(room.Name) == false) { // ROOM이 처음 생성이 된 경우 GameObject roomObj = InstantiateRoom(); roomObj.GetComponent<RoomButtonManager>().SetData(room.Name, room.PlayerCount, room.MaxPlayers); DIC.Add(room.Name, roomObj); } else { DIC.TryGetValue((room.Name), out roomPrefab); roomPrefab.GetComponent<RoomButtonManager>().SetData(room.Name, room.PlayerCount, room.MaxPlayers); } } } }
방이 생성이 된다면 Scroll View도 변화가 있어야하니 수정을 해주었습니다.
만약에 방이 삭제가 된다면 해당 방을 파괴를 해줍니다.
그게 아니고 처음으로 방을 만들었다면 새롭게 버튼을 생성해주고 SetData의 값을 넘겨주어 값을 설정해줍니다.
그것이 아니라 방안에서 수정을 할 수 있으니, 방안에서 수정을 한다면 업데이트를 해줍니다.
아이디와 비밀번호를 입력 후 로그인을 해줍니다.
그러면 로비 씬으로 넘어와집니다.
방 제목과 인원을 입력 후 방을 생성을 합니다
방을 생성하는 동시에 방에 입장을 하게 됩니다.
다른 유저의 화면에서는 위와 같은 방이 만들어져서 버튼이 보이게 됩니다.
'Unity > FPS Project' 카테고리의 다른 글
[Photon] 애니메이션 동기화 및 UI 분리 (0) 2025.05.16 [Photon] 유저 입장 및 동기화 (0) 2025.05.14 [Photon] 회원가입 및 로그인 (0) 2025.05.08 FPS Project - 12 [ 맵 수정 및 몬스터 소환 ] (0) 2025.05.02 FPS Project - 11 [ 점프 오류 수정 ] (0) 2025.04.18 다음글이전글이전 글이 없습니다.댓글