9

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");



}

動作しますが、時間がかかるなどの欠点があります。より良い解決策のアイデアはありますか?

4

1 に答える 1

2

解決策はここにあります:ドキュメント

SQL Lobby Typeを使用する必要があります。

ルームの作成:

    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);

参加する部屋:

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"

あなたの場合、C0 をブロックされているプレーヤーのリストに置き換え、新しいユーザーがゲームをプレイするたびにこのリストを更新し、30 分後にリストから削除するだけです。

それに関して他の問題に直面する場合は、お知らせください。

于 2016-08-10T23:03:44.307 に答える