룸 작성은 유저가 임의로 할 수 있도록 하고 리스트는 로비에서 공개하지만, 실제 룸으로의 입실은 초대자만으로 한정하고 싶은 경우가 있으리라 생각합니다.
실현 방법은 몇 가지가 있지만, 여기에서는 2가지를 안내해 드리겠습니다.
1. 룸 이름에 비밀번호를 추가하는 방법
기본적인 개요
룸을 작성할 때, 룸 이름을 시스템에서 고유 값이 되도록 정한 키와 전후의 초대자만 알 수 있는 비밀번호를 부가하는 방법이 있습니다.
예를 들어, 룸 작성 이후에 비밀번호를 부가하려고 한다면 룸 이름은(키)+"_"+(비밀번호)라는 형태가 됩니다.
룸 이름을 취득하고 표시할 때, "_" 이후의 비밀번호 부분은 빼고, 리스트 상에는 보이지 않게 되어버립니다.
그리고 리스트에서 선택된 룸에 입실할 때, 비밀번호를 입력, (리스트상에서 취득한 룸 이름에서 비밀번호를 제외한 것(=키)+"_"+(입력된 비밀번호)라는 룸 이름으로 입실을 시도하여, 비밀번호가 일치하면 입실이 완료됩니다.
비밀번호가 일치하지 않으면, 룸을 찾을 수 없게 되어 입실에 실패하게 됩니다.
룸 리스트를 취득하고 표시하는 경우에 룸 이름의 필터링이 필요해집니다만, 사용하는 기능은 매우 단순한 형태입니다.
실제 값을 사용한 사례
여기서는, 키 부분을 유저 ID(수치), 비밀번호를 수치 4 자릿수라고 가정합시다.
유저 ID:1010의 유저가 비밀번호 1234로 룸을 작성할 경우,
1010_1234
라는 룸 이름으로 룸을 작성합니다.
룸 리스트를 취득할 경우
- 1010_1234
- 1105_2468
- 1530_9876
- …
와 같은 형식으로 룸 리스트를 취득할 수 있습니다.
룸 이름의 _ 이후의 부분은 우선 삭제합니다.
- 1010
- 1105
- 1530
그대로 ID만 표시해도 다른 유저는 모르기 때문에 플레이어 이름으로 변환해서 표시합니다.
- Photon철수
- Realtime영수
- Server영희
또한, ID->플레이어 이름으로의 변환은 자신의 DB를 참조하는 것도 좋지만, 2에서 설명하는 룸의 커스텀 프로퍼티를 이용하면 편리합니다.
커스텀 프로퍼티의 자세한 사항은 나중에 설명 드리겠습니다.
입실하는 유저는 이 리스트에서 선택하고 선택한 후 비밀번호를 입력하게 됩니다.
유저가 입력한 비밀번호를 부가하고 입실을 시도합니다.
예를 들어 가장 처음 룸에서 유저가 비밀번호를 1235라고 입력한 경우,
1010_1235
라는 이름으로 입실을 시도합니다. 이 경우, 룸 이름이 일치하지 않아 룸을 찾지 못한 것으로 인식되어, 에러가 발생, 입실에 실패합니다.
비밀번호를 바르게 1234로 입력한 경우
1010_1234
라는 이름으로 입실을 시도합니다. 이 경우는 방 이름과 일치하게 되어, 입실에 성공합니다.
코드 예
실제 코드 예를 표시합니다.
룸 작성
룸 작성은 룸 이름만 생각하면 되지만, 일람표에서 표시할 때의 표시명을 커스텀 프로퍼티에 설정해야 합니다.
PUN에서의 예는 다음과 같습니다.
string roomName = userid + "_" + password; RoomOptions roomOptions; roomOptions.isVisible = true; roomOptions.isOpen = true; roomOptions.customProperties = new Hashtable() { { "displayname", displayname } }; roomOptions.customRoomPropertiesForLobby = new string[] { "displayname" }; PhotonNetwork.CreateRoom(roomName, roomOptions, null);
Native SDK(C#)의 예는 다음과 같습니다. 기본적으로는 PUN과 마찬가지이며, 다른 언어에서도 거의 같습니다.
또한, 여기서는 client인스턴스의 생성에 관해서는 생략하고 있습니다. 이 부분에 대해서는 다른 기회에 소개해 드리겠습니다.
string roomName = userid + "_" + password; Hashtable customGamePropeties = new Hashtable() { { "displayname", displayname } }; string[] propsListedInLobby = new string[] { "displayname" }; client.OpCreateRoom(roomName, 0, customGameProperties, propsListedInLobby);
룸 입실
입실도 작성과 마찬가지로 룸 이름의 부분만 생각하면 됩니다.
PUN의 예
string roomName = userid + "_" + password; PhotonNetwork.JoinRoom(roomName); OnPhotonJoinRoomFailed() { // 입실 실패 시의 코드 } OnJoinedRoom() { // 입실 성공 시의 코드
}
Native SDK(C#)
도 콜백 부분에 대해서는 그것만으로 분량이 많아지므로 생략하였습니다. 이 부분에 대해서도 별도로 소개해 드리겠습니다.
string roomName = userid + "_" + password; client.JoinRoom(roomName);
2. 룸의 커스텀 프로퍼티+랜덤 매치 메이킹을 이용하는 방법
기본적인 개요
또 하나의 방법으로 룸의 커스텀 프로퍼티를 이용하는 방법이 있습니다.
그리고 랜덤 매치 메이킹에서는 커스텀 프로퍼티를 지정할 수 있기 때문에 그것을 이용합니다.
커스텀 프로퍼티는 해시테이블 형식으로 되어 있습니다. 또한, 랜덤 매치 메이킹을 할 때, 룸 이름은 매치 메이킹에 사용할 수 없으므로 룸 이름과 다르게 설정합니다.
실제 값을 사용한 사례
여기서는 룸 이름을 1.과 마찬가지로 유저 ID(정수 값)으로 합니다만, 고유 값이 되는 키이면 무엇이든 괜찮습니다.
룸 이름=>유저 ID
커스텀 프로퍼티=>(
"roomname"=>유저 ID
"password"=>비밀번호
"displayname"=>표시명
)
또한, 룸의 커스텀 프로퍼티를 로비에서 보이도록 하기 위해서는 룸 작성 시에 로비에서 보이도록 지정할 필요가 있습니다.
파라미터로 로비에 보이게 하고 싶은 커스텀 프로퍼티의 키를 지정합니다.
- 의 경우에서 표시명을 커스텀 프로퍼티에서 설정하면 편하다고 했는데, 여기서 말하는 displayname만 설정하고, 로비에서 보이도록 한다는 뜻입니다.
입실할 때는 랜덤 매치 메이킹을 사용합니다만, 커스텀 프로퍼티를 지정함으로써 실질적으로 룸을 지정해서 입실하는 형태가 됩니다.
커스텀 프로퍼티=>(
"roomname"=>유저 ID
"password"=>비밀번호
)
상기에 일치하는 룸을 랜덤 매치 메이킹으로 입실하도록 합니다.
실질적인 룸 이름도 커스텀 프로퍼티에서 지정하고 있으므로, 패스워드가 일치하면 입실 성공, 일치하지 않으면 실패하는 형태가 됩니다.
코드 예
룸 작성
룸 작성 시에 커스텀 프로퍼티로 설정하는 부분이 중요합니다. 또한, 로비에서 이용할 수 있도록 하는 부분에도 주목해야 합니다.
PUN에서의 예
string roomName = userid + "_" + password; RoomOptions roomOptions; roomOptions.isVisible = true; roomOptions.isOpen = true; roomOptions.customProperties = new Hashtable() { { "roomname", userid }, { "password", password }, { "displayname", displayname } }; roomOptions.customRoomPropertiesForLobby = new string[] { "roomname", "password", "displayname", }; PhotonNetwork.CreateRoom(roomName, roomOptions, null);
Native SDK(C#)의 예
string roomName = userid + "_" + password; Hashtable customGamePropeties = new Hashtable() { { "roomname", userid }, { "password", password }, { "displayname", displayname } }; string[] propsListedInLobby = new string[] { "roomname", "password", "displayname" }; client.OpCreateRoom(roomName, 0, customGameProperties, propsListedInLobby);
룸 입실
랜덤 매치 메이킹(JoinRandomRoom)을 사용합니다. 그때, 커스텀 프로퍼티를 지정하고 실질적으로 고유 값의 룸을 지정하는 형태가 됩니다.
PUN의 예
Hashtable expectedCustomProperties = new Hashtable() { { "roomname", userid }, { "password", password }, }; PhotonNetwork.JoinRandomRoom(expectedCustomProperties, 0); OnPhotonJoinRandomRoomFailed() { // 입실 실패 시의 코드 } OnJoinedRoom() { // 입실 성공 시의 코드 }
Navive SDK(C#)의 경우
Hashtable expectedCustomRoomProperties = new Hashtable() { { "roomname", userid }, { "password", password }, }; client.OpJoinRandomRoom(expectedCustomRoomProperties, 0);
댓글
댓글 0개
댓글을 남기려면 로그인하세요.