首页 > 解决方案 > GameSparks 手动配对

问题描述

我和我的团队正在 Unity 中构建游戏,并使用 GameSparks 在我们的游戏中实现网络。我们正在尝试实现手动匹配,以便在匹配时,GameSparks 不会自动为我们匹配玩家。我们想自己控制它。

所以根据他们的文档,首先我们必须调用 MatchMakingRequest

new GameSparks.Api.Requests.MatchmakingRequest()
        .SetMatchShortCode("match_name")
        .SetSkill(0) // 
        .Send((response) => {
            if (response.HasErrors)
            { // check for errors
                    Debug.LogError("GSM| MatchMaking Error \n" + response.Errors.JSON);
            }
            else
            {
                    Debug.Log("MatchMakingRequest response: " + response.JSONString);
            }
        });

这将创建一个具有匹配 ID 的匹配(例如,这个新创建的匹配的匹配 ID 为 1)。之后我们需要调用 FindPendingMatchesRequest。

new GameSparks.Api.Requests.FindPendingMatchesRequest()
      .SetMatchShortCode("MP_match")
      .Send((response) =>
    {
        if (response.HasErrors)
        {
                Debug.Log("Matchmaking error: " + response.Errors.JSON);
        }
        else
        {
                Debug.Log(response.JSONString);
        }
    });

这样做,根据他们的文档,假设找到一个未决匹配项,在这种情况下,这将是使用 ID 1 创建的匹配项。但是,它会创建一个 ID 为 2 的新未决匹配项。

例如,如果两个玩家尝试玩:

- 玩家 1 自动调用 MatchMakingRequest 并创建一个 ID 为 1 的匹配。但他也调用 FindPendingMatchesRequest 创建一个 ID 为 2 的新匹配。

-Player 2 现在调用 FindPendingMatchesRequest,而不是查找 ID 1 或 ID 2 的匹配,它创建一个 ID 3 的新匹配。

这将继续发生在每个寻找未决比赛的新玩家身上,因此他们永远不会加入彼此的会话。

所以我的问题是我如何获得 FindPendingMatches 请求以实际找到未决匹配而不是创建一个全新的匹配?

标签: unity3dnetwork-programmingmatchgamesparks

解决方案


我认为你做错的事情很少。首先,自定义匹配逻辑发生在服务器端,您可以在 GameSpark -> Configurator -> Multiplayer -> Matches 上对其进行配置。

在那里您可以设置最小/最大播放器、阈值(最小、最大等待时间)、自定义脚本等。在自定义脚本上是您设置手动匹配逻辑的地方。

发生在您这边的原因可能是因为您的比赛设置有问题,您可以参考此处查看教程:

https://docs.gamesparks.com/tutorials/multiplayer/matching-players.html#customizing-matching


推荐阅读