GameSparks 手动配对
GameSparks Manual Matchmaking
我和我的团队正在 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 的新匹配。
-玩家 2 现在调用 FindPendingMatchesRequest,而不是查找 ID 1 或 ID 2 的匹配项,而是创建 ID 3 的新匹配项。
每个寻找未决比赛的新玩家都会继续发生这种情况,因此他们永远不会加入彼此的会话。
所以我的问题是如何让 FindPendingMatches 请求真正找到一个待处理的匹配项而不是创建一个全新的匹配项?
我认为您几乎没有弄错。首先,自定义配对逻辑发生在服务器端,您可以在 GameSpark -> Configurator -> Multiplayer -> Matches 上对其进行配置。
在那里你可以设置 min/max 播放器、阈值(最小、最大等待时间)、自定义脚本等。在自定义脚本上是您设置手动配对逻辑的地方。
你这边的原因可能是你的比赛设置有问题,你可以参考这里看教程:
https://docs.gamesparks.com/tutorials/multiplayer/matching-players.html#customizing-matching
我和我的团队正在 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 的新匹配。
-玩家 2 现在调用 FindPendingMatchesRequest,而不是查找 ID 1 或 ID 2 的匹配项,而是创建 ID 3 的新匹配项。
每个寻找未决比赛的新玩家都会继续发生这种情况,因此他们永远不会加入彼此的会话。
所以我的问题是如何让 FindPendingMatches 请求真正找到一个待处理的匹配项而不是创建一个全新的匹配项?
我认为您几乎没有弄错。首先,自定义配对逻辑发生在服务器端,您可以在 GameSpark -> Configurator -> Multiplayer -> Matches 上对其进行配置。
在那里你可以设置 min/max 播放器、阈值(最小、最大等待时间)、自定义脚本等。在自定义脚本上是您设置手动配对逻辑的地方。
你这边的原因可能是你的比赛设置有问题,你可以参考这里看教程:
https://docs.gamesparks.com/tutorials/multiplayer/matching-players.html#customizing-matching