- [Photon] 방 상태 추가2025년 06월 19일
- SiJun-Park
- 작성자
- 2025.06.19.:39
이제 방상태에 따라서 입장이 가능하거나 불가능하게 만들 필요가 있어서 구현을 하였습니다.
public void OnCreateRoom() { SoundManager.Instance.ClickButton(); RoomOptions roomOptions = new RoomOptions(); roomOptions.MaxPlayers = byte.Parse(RoomCapacityInputField.text); roomOptions.IsOpen = true; roomOptions.IsVisible = true; roomOptions.CustomRoomProperties = new ExitGames.Client.Photon.Hashtable { { "RoomState", "Waiting" } }; roomOptions.CustomRoomPropertiesForLobby = new string[] { "RoomState" }; PhotonNetwork.CreateRoom(RoomNameInputField.text, roomOptions ); }
방을 생성하기 전에 CustomRoomProperties로 현재 상태를 저장해줍니다.
public override void OnRoomListUpdate(List<RoomInfo> roomList) { GameObject roomPrefab; foreach (RoomInfo room in roomList) { if (room.CustomProperties.TryGetValue("RoomState", out object stateObj)) { string state = stateObj as string; if (state != "Waiting") { // 상태가 Waiting이 아니면 방 삭제 처리 if (DIC.TryGetValue(room.Name, out roomPrefab)) { Destroy(roomPrefab); DIC.Remove(room.Name); } continue; // 다음 방 처리 } } else { if (DIC.TryGetValue(room.Name, out roomPrefab)) { Destroy(roomPrefab); DIC.Remove(room.Name); } continue; } 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(); Debug.Log(roomObj.name); 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); } } } }
그 다음으로는 방 상태를 확인해서 Waiting 상태인 경우만 표시 하도록 하였습니다.
여기서 만약을 위해 해당 변수가 없을 경우 삭제를 하였습니다.
public static void SetRoomState(string newState) { var currentRoom = PhotonNetwork.CurrentRoom; if (currentRoom == null) return; var roomstate = currentRoom.CustomProperties; if (roomstate.TryGetValue("RoomState", out object currentStateObj)) { if ((currentStateObj as string) == newState) return; } currentRoom.SetCustomProperties(new PhotonHashTable {{ "RoomState", newState }}); }
현재 방 상태를 바꾸는 DataManager의 코드입니다.
string으로 값을 받아서 해당 값으로 바꾸어 줍니다.
IEnumerator DelayedLoadScene() { yield return new WaitForSeconds(0.2f); // 약간의 지연 PhotonView sound = SoundManager.Instance.GetComponent<PhotonView>(); sound.RPC("RPC_Play_BGM", RpcTarget.All, 1); SetRoomState("Playing"); PhotonNetwork.LoadLevel("Game Scene"); }
마지막으로 게임 시작을 하면 현재 룸 상태를 Playing 상태로 바꾸어 줍니다.
게임 시작 전 결과 게임을 시작하니 방 목록에서 사라지는 것을 확인 할 수 있습니다.
'Unity > FPS Project' 카테고리의 다른 글
[Photon] 스코어 보드 (1) 2025.06.15 [Photon] 피해 및 사망 로직 변경 (0) 2025.06.13 [Photon] 몬스터 체력 동기화 문제 (0) 2025.06.11 [Photon] 몬스터 공격 수정 (0) 2025.06.10 [Photon] 방 입장 및 레디 상태 추가 (0) 2025.06.07 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)