Photon Unity Networking을 이용하여 게임 내에서 협력 플레이를 구현할 때 레벨이 비슷한 플레이어끼리 매칭하는 방법에 대해서 소개합니다.
우선 플레이어의 레벨을 그룹화하고 그 그룹별로 매칭을 실시합니다.
여기에서는 아주 간단한 예로, 플레이어의 그룹화는 레벨에 맞추어 적당히 그룹을 작성했습니다.
/// ///레벨을 랭킹으로 변환 /// ///레벨에서 랭킹을 취득합니다 ///레벨 string LevelToMatchRank (int level) { if (level <= 20) return "E"; if (level <= 40) return "D"; if (level <= 60) return "C"; if (level <= 80) return "B"; if (level <= 99) return "A"; if (level == 100) return "S"; return ""; }
다음으로 레벨이나 랭킹과 같은 플레이어에 관련된 파라미터를 플레이어의 커스텀 프로퍼티에 세팅 합니다.
여기에서는 유저명, 레벨, 랭킹을 커스텀 프로퍼티에 세팅해보도록 하겠습니다.
propeties = new Hashtable (){{"UserName", userName}, {"Level", ((int)levelValue).ToString()}, {"Rank", rank}, {"RoomName", roomName} };
룸을 작성할 때는, 룸의 커스텀 프로퍼티로서 랭킹이 존재합니다. 입실 시에 룸의 커스텀 프로퍼티를 보고, 매치 될 때만 입실시키기 때문입니다.
/// <summary> /// 룸의 작성 /// </summary> /// <param name="properties">Properties.</param> public void CreateRoom (Hashtable properties) { RoomOptions roomOptions = new RoomOptions (); roomOptions.isVisible = true; roomOptions.isOpen = true; roomOptions.maxPlayers = 4; roomOptions.customRoomProperties = new Hashtable (){{"Rank", (string)properties["Rank"]} }; roomOptions.customRoomPropertiesForLobby = new string[] {"Rank"}; if (PhotonNetwork.GetRoomList ().Length == 0) { PhotonNetwork.CreateRoom ((string)properties ["RoomName"], roomOptions, null); return; } foreach (RoomInfo roomInfo in PhotonNetwork.GetRoomList()) { if (roomInfo.name != (string)properties ["RoomName"]) { PhotonNetwork.CreateRoom ((string)properties ["RoomName"], roomOptions, null); } else { isRoomEnabled = true; } } }
실제로 룸에 들어갈 때에 플레이어의 커스텀 프로퍼티 랭킹과,
룸의 커스텀 프로퍼티 랭킹이 일치하는지를 확인시킵니다.
여기에서는 foreach로 위에서부터 룸을 검색하고 있습니다만,
랜덤으로 검색하도록 하면, 더욱 게임다운 느낌이 날 것입니다.
/// <summary> /// 룸의 작성 /// </summary> /// <param name="properties">Properties.</param> public void CreateRoom (Hashtable properties) { RoomOptions roomOptions = new RoomOptions (); roomOptions.isVisible = true; roomOptions.isOpen = true; roomOptions.maxPlayers = 4; roomOptions.customRoomProperties = new Hashtable (){{"Rank", (string)properties["Rank"]} }; roomOptions.customRoomPropertiesForLobby = new string[] {"Rank"}; if (PhotonNetwork.GetRoomList ().Length == 0) { PhotonNetwork.CreateRoom ((string)properties ["RoomName"], roomOptions, null); return; } foreach (RoomInfo roomInfo in PhotonNetwork.GetRoomList()) { if (roomInfo.name != (string)properties ["RoomName"]) { PhotonNetwork.CreateRoom ((string)properties ["RoomName"], roomOptions, null); } else { isRoomEnabled = true; } } }
이처럼 룸의 커스텀 프로퍼티와 플레이어의 커스텀 프로퍼티를 이용함으로써 레벨에 맞는 매칭을 구현할 수 있습니다.
댓글
댓글 0개
댓글을 남기려면 로그인하세요.