Photon 룸 프로퍼티 갱신 규칙
넘겨주는 Hashtable 형태서버에서의 처리
| { key : value } | key 가 존재하면 값 덮어쓰기, 없으면 새로 추가 |
| { key : null } | key 삭제(=제거) |
| 키가 없음 | 그 키에 대해 아무 변화도 없음 |
SetCustomProperties() 는 “넘겨준 키만 보고” 처리한다.
따라서,
var roomProps = PhotonNetwork.CurrentRoom.CustomProperties; // ← 전체 사본 roomProps.Remove("MatchStartingLock"); // ← C# 변수에서 삭제 PhotonNetwork.CurrentRoom.SetCustomProperties(roomProps); // ← (키 없음) 전송
클라이언트가 서버로 보내는 Hashtable 에 MatchStartingLock 키 자체가
포함돼 있지 않으므로
Photon 은 “아, 변경할 게 없군” 하고 그냥 무시해 버린다.
결과적으로 서버에는 여전히 MatchStartingLock = true 가 남아 있게 된다.
올바른 삭제 패턴 두 가지
복사편집
// ① null 로 보내서 ‘삭제’ 의도를 명시 PhotonNetwork.CurrentRoom.SetCustomProperties( new Hashtable { { CustomPropKey.MatchStartingLock, null } }); // ② 또는 false 같은 다른 값으로 덮어쓰기 PhotonNetwork.CurrentRoom.SetCustomProperties( new Hashtable { { CustomPropKey.MatchStartingLock, false } });
- “null” 을 보내면 Photon 서버가 해당 키를 완전히 제거
- 다른 값(예: false)으로 덮어쓰면 키는 남지만 잠금 논리가 작동하지 않도록
할 수 있음.
정리
- Remove() 만으로는 서버에 반영되지 않는다.
(SetCustomProperties() 가 “없는 키”는 건드리지 않기 때문) - 삭제하려면 그 키를 null(또는 원하지 않는 새 값)로 명시해서
SetCustomProperties() 에 넘겨줘야 한다.
그러므로 기존 코드에서
roomProps.Remove(CustomPropKey.MatchStartingLock); PhotonNetwork.CurrentRoom.SetCustomProperties(roomProps);
를 아래처럼 바꿔 주면 원하는 대로 작동한다.
PhotonNetwork.CurrentRoom.SetCustomProperties( new Hashtable { { CustomPropKey.MatchStartingLock, null } });
'Unity 개발 공부' 카테고리의 다른 글
| [내배캠] 본캠 81 게임 씬 카운트다운 및 게임 타이머 동기화 via Photon RPC (0) | 2025.07.30 |
|---|---|
| [내배캠] 본캠 69 렌더링공부, 페인트칠 공부 (0) | 2025.07.14 |
| [내배캠] 본캠 63 쉐이더공부를 위한 기본이론공부 (6) | 2025.07.04 |
| [내배캠] 본캠 57 pun2 공부5 (2) | 2025.07.03 |
| [내배캠] 본캠 60 pun2 공부7, 시간 (1) | 2025.07.03 |