Çağ*_*aya 9 rpc block unity-game-engine photon matchmaking
我们正在使用Photon引擎制作随机匹配制作游戏.我们希望在一定时间内匹配具有不同用户的玩家.如果PlayerA与PlayerB一起玩,他们将无法再玩30分钟.做这种系统的最佳方法是什么?
我们尝试了一些算法,但它并不适合.
public override void OnJoinedRoom()
{
if(PhotonNetwork.isMasterClient)
StartCoroutine("StartWaiting");
theSameGame = false;
var photonPlayer = PhotonNetwork.Instantiate("PhotonPlayerKO", Vector3.zero, Quaternion.identity, 0) as GameObject;
photonPlayer.name = "Local Player";
if(PhotonNetwork.playerList.Count() > 1 && !PhotonNetwork.isMasterClient)
photonViewOfManager.RPC("MyNameIs", PhotonTargets.Others, PlayerInfos.thePlayersName);
//Sending player name to other player to check whether this name is playable or not ?
if(!PhotonNetwork.isMasterClient)
StartCoroutine("CheckError");
}
Run Code Online (Sandbox Code Playgroud)
它有效,但有一些缺点,如耗时vs ..任何想法更好的解决方案?
小智 2
解决方案可以在这里找到:文档
您需要使用SQL 大厅类型:
创建房间:
RoomOptions roomOptions = new RoomOptions();
roomOptions.MaxPlayers = expectedMaxPlayers;
// in this example, C0 might be 0 or 1 for the two (fictional) game modes
roomOptions.customRoomProperties = new ExitGames.Client.Photon.Hashtable() { { "C0", 1 } };
roomOptions.customRoomPropertiesForLobby = new string[] { "C0" }; // this makes "C0" available in the lobby
// let's create this room in SqlLobby "myLobby" explicitly
TypedLobby sqlLobby = new TypedLobby("myLobby", LobbyType.SqlLobby);
lbClient.OpCreateRoom(roomName, roomOptions, sqlLobby);
Run Code Online (Sandbox Code Playgroud)
加入房间:
TypedLobby sqlLobby = new TypedLobby("myLobby", LobbyType.SqlLobby); // same as above
string sqlLobbyFilter = "C0 = 0"; // find a game with mode 0
lbClient.OpJoinRandomRoom(null, expectedMaxPlayers, matchmakingMode, sqlLobby, sqlLobbyFilter);
// more filter variations:
// "C0 = 1 AND C2 > 50"
// "C5 = \"Map2\" AND C2 > 10 AND C2 < 20"
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您只需将 C0 替换为被阻止的玩家列表,并在每次新用户玩游戏时更新此列表,并在 30 分钟后将其从列表中删除。
如果您遇到其他问题,请告诉我们。
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |