大多数浏览器和
Developer App 均支持流媒体播放。
-
了解 Game Center 中基于规则的匹配功能
探索如何将基于规则的新匹配功能整合到实时多人游戏中。了解如何提供定制且灵活的匹配,以提高玩家匹配的质量,为所有玩家打造更生动有趣、引人入胜的体验。
资源
- App Store Connect API
- Generating JSON Web Tokens for API requests
- Matchmaking rules
- Metrics
- Python script to test your matchmaking rules using the App Store Connect API
相关视频
Tech Talks
-
下载
欢迎大家 我叫 Philip Smith 我是 Game Center Services 的工程师
我将与你分享 Game Center 中 基于规则的新匹配功能
此功能为你的游戏提供定制匹配 从而提高匹配质量 带来更引人入胜 公平公正的游戏体验
我将首先简要介绍 Game Center 匹配功能 该功能让实时多人游戏的玩家 可发现并连接其他玩家 然后 我将分享 如何设置基于规则的匹配
我们来深入了解一下
匹配的目的是为玩家 提供生动有趣、引人入胜的体验 如果玩家很投入 你将能留存他们更长时间
由于目前每个游戏都是独一无二的 因此有许多不同的匹配用例
你可能希望创建独特的游戏模式 具有自己的规则 以获得个性化的游戏体验
你也可能希望确保对决公平而平衡 根据技能水平或偏好对玩家进行分组
这样你就可以避免为用户 匹配了不合适游戏 所带来的沮丧或无聊 某些游戏模式可能需要团队互相竞争 你应尽量让团队的实力彼此相当 以免带来一边倒的体验
另一个用例是使用派对代码为朋友 或更广泛的社交群组设置私人匹配 但没有什么比等待很长时间 才能找到匹配项更令人沮丧的了 因此 请考虑适当放宽约束条件 兼顾等待时间和匹配质量
通过 Game Center Classic 匹配 你已经可以让玩家在实时多人游戏中 发现并连接其他人 现在有了基于规则的匹配 你将能够 做更多的事情
你可以提供自定义规则 以实现公平而平衡的匹配 你能够随时间放宽限制 并很容易更新规则以适应实际使用模式
现在 我们来看一下 匹配系统的各个部分 是如何协同工作的
经典的 Game Center 匹配系统是 一个关于如何匹配玩家的黑匣子 在这个示例中 Alice 和 Bob 现在想玩游戏 游戏通过 GameKit 提交匹配请求 GameKit API 让游戏将匹配 限制为相同玩家组的请求 一旦 Game Center 找到匹配项 GameKit 就会收到通知
并继续在设备之间 创建实时连接 今天我将打开黑匣子 分享更多关于基于规则的匹配详情 以便你可以自定义 玩家在游戏中的匹配方式 为其打造更出色的玩家体验
我现在可以使用 App Store Connect API 配置最适合游戏的规则 在游戏方面 GameKit SDK 为我提供了 API 以指定匹配请求队列 以及供规则所使用的 自定义玩家属性
Game Center 服务定期运行算法 使用我的规则查找 队列中请求之间的匹配项
当找到匹配项时 GameKit 会收到通知 并继续创建 设备之间的实时连接
通过基于规则的匹配 Game Center 提供了一个匹配框架 我可以通过该框架配置队列 以及为游戏定制的规则集 我可以使用强大的规则语言 表达匹配约束 GameKit 为我的游戏 提供了新的 API 包括我的规则要使用的 自定义玩家属性 它还提供了开发者工具 让我 使用示例请求测试我的规则 并获取相关指标 以帮助我了解真实的玩家体验
我将向你解释如何配置、测试和观察 基于规则的匹配
设置基于规则的匹配有六个步骤 我们来逐一了解 第一步是准备 使用 App Store Connect API
规则配置是使用 App Store Connect API 的 REST 端点 来实现的 如果你熟悉这一点 对你来说应该很简单 要访问 API 你需要使用你所属机构的 App Store Connect 账户 创建 API 私钥 调用 API 需要 JSON Web Token 进行授权 请参阅 Apple 开发者文档 了解如何为 App Store Connect API 创建 API 密钥 以及如何生成验证令牌 接下来我们将介绍创建规则集 和添加规则以自定义匹配的步骤
我为本游戏探索的用例 是基于技能的匹配 与技能水平相似的玩家进行匹配 可以带来更出色的游戏体验 但如果我强制执行 严格的最大技能差异的标准 玩家可能会 等待很长时间才能完成匹配 我认为 如果我可以在等待时间 与技能差异之间达成平衡 可以带来更好的体验 为此我可以等待时间越长 越放宽最大技能差异的标准 基于规则的匹配让我 可随着时间的推移放松限制 以便在匹配质量和等待时间之间 取得平衡 在此示例中 我的队列中有三名 具有不同技能水平的玩家 我认为 对我的游戏来说 更佳的匹配是玩家 技能值差异为 20 或更少 但此时没有玩家 满足这个约束 我想要的是等待五秒后 将所需的最大技能差异扩大到 40 现在看起来技能 20 和 45 的玩家 将会匹配
但就我的例子而言 假如技能为 45 的玩家 退出并取消他们的请求 让其余玩家没有匹配项
再次地 我想在等待之后扩大技能范围 比如说 再等五秒已达到 100 也就是游戏可能的最大技能差异 以确保玩家获得匹配 现在我们有一个匹配了 因此 尽管我的玩家必须等待 但他们还是可以获得匹配 可以享受玩游戏的乐趣 下次 我确信他们会与 技能更接近的玩家相互匹配 我使用 App Store Connect API 端点 为我所属组织配置规则集和规则 我使用 GameCenterMatchmakingRuleSets 端点来配置规则集 我为游戏创建了名为 SkillBasedRules 的规则集
我使用 GameCenterMatchmakingRules 端点将规则添加到我的规则集 现在 我的游戏具有不兼容的 不同 App 版本 因此我还添加了一条规则 要求仅匹配兼容的 App 版本
我添加了另一条规则 来优先选择延迟较低的玩家 最后 我添加一条规则 要求所有匹配的玩家的 技能值都在给定范围内 为了更详细地了解请求内容 这里我先创建一个规则集来包含规则 传入一个引用名称
最小玩家数量 以及最大玩家数量
所有这些属性都是我的游戏特有的 规则集和队列 与 App Store Connect 提供商组织相关联 因此我们建议使用 游戏 Bundle ID 的 反向域名作为规则集名称前缀 以避免任何名称冲突 以下是包含新创建的 规则集的 ID 的响应 我在后续的 API 调用中 会需要它来添加规则 并创建队列 下一步是使用 GameCenterMatchmakingRules 端点添加规则 我将展示 SkillDifference 规则的 详细信息
将规则添加到刚刚创建的规则集中 引用上次响应中的 ID 使规则类型匹配
添加说明
为规则命名
最重要的是 要评估的表达式
表达式语法是一种名为 JMESPath 的 开源 JSON 查询语言
我们来深入研究一下这个表达式 你可以看到这个比较表达式 确保左侧值 小于或等于右侧值
左侧是 diff 函数 计算当前候选请求的 最低技能水平 和最高技能水平之间的差异 右侧是固定值 20
现在此表达式要求匹配请求的 最大技能差异为 20 这个表达式对于初步测试 是没问题的 但我认为 在实际使用中某些玩家的 等待匹配的时间可能会很长
我希望随着请求的等待时间增长 而扩大技能范围 以便玩家在合理的时间内进行匹配 并且能够享受游戏的乐趣 为此我需要使用不同的表达式
要更新规则 我使用 GameCenterMatchmakingRules 端点和 PATCH 方法
此操作的 URL 和内容 需要规则的 ID
包含更新的说明
和更新的表达式 这个规则应该会好很多
这里我有一个更复杂的表达式
我们有相同的左侧和比较表达式
但现在 右侧是一个 agedValues 函数 这将根据候选请求的平均等待时间 扩大技能范围 第一个参数是候选请求的 平均等待时间
然后下一个参数 是当请求的等待时间小于五秒时 我想强制执行的初始技能范围为 20
下一个参数是 扩展技能范围值的数组 40 表示第一个技能范围扩展 其中等待时间大于或等于五秒 并小于 10 秒
100 表示第二次扩展 当等待时间大于或等于 10 秒时 其技能范围增加到 100
最后一个参数是 等待时间值边界数组 其中技能范围将得到扩展 我们将其配置为 5 秒和10 秒
现在我将测试规则集 以确保它按预期运作
提供 App Store Connect API gameCenterMatchmakingRuleSetTests 以便在与 App 集成之前 测试和验证规则 端点所需的内容非常冗长 使用脚本接受更简单的输入 并允许以更有效的方式测试规则 这有助于隐藏复杂性
查看该视频的资源列表 以下载 Python 脚本 有关使用 App Store Connect API 的所有详细信息 包括 GameCenterMatchmakingRuleSetTests 端点 可查阅 App Store Connect API 的 Apple 开发者文档 以下是使用 testrules Python 脚本 的示例
我正在使用之前创建的 规则集 ID 运行脚本
并且我们有一个包含三个请求的队列 现在第一个请求的技能为 10 并且在队列中是全新的 第二个请求的技能为 50 并且已在队列中等待了 5 秒 第三个也是最后一个技能为 90 并且已在队列中等待了 10 秒 现在回想一下 我设置的规则要求新请求的技能差异 为 20 或更少 对于队列中已等待超过 5 秒的请求 技能差异为 40 第一个和第二个请求匹配吗? 我不这么认为 因为技能差距超过 20 第二个和第三个请求匹配吗? 是的 他们的差距为 40 但已在队列中等待了 5 秒 输出显示 第二个 和第三个请求已匹配 因此我的规则按预期运行
当然 我会运行更多的测试用例 以确保我的规则是好的
下一步是配置请求队列
我们回想一下 我在配置过程的哪个地方中断 我已经创建了规则集和规则 我刚刚测试了规则 它们按照我的预期工作 现在我使用 GameCenterMatchmakingQueues 端点为与我的规则集关联的 App 请求创建队列 这里我称之为技能队列
这里我会更详细地介绍所需内容 以创建一个 关联至之前创建的规则集的队列 我引用规则集 ID 并为队列提供合适的名称 我使用反向域名前缀作为队列命名 就像规则集名称一样
这就是我的匹配规则的 所有 App Store Connect API 配置 接下来 我将介绍添加到 App 以与基于规则的匹配相集成的代码
使用现有的 GameKit 框架类 GKMatchRequest 和 GKMatch
它们具有新的对象属性 queueName 和属性 以支持基于规则的匹配
在 App 中我添加代码来创建 GKMatchRequest 对象 并设置匹配规则属性 以使用技能级别队列 及其规则集来寻找玩家
我将队列名称属性设置为 之前创建的队列的引用名称 我将 GKMatchRequest 属性设置为键值对的字典 该字典提供在我的规则表达式中 使用的值 我的规则仅使用本地玩家技能值 的一个属性
我使用 GKMatchmaker 方法提交匹配请求 来查找匹配项 而无需显示用户界面 你也可以显示 GKMatchmaker 视图 来查找匹配项
最后一步是观察 你的匹配规则如何与实际玩家配合
你可以使用 App Store Connect API 指标端点 来诊断匹配规则的问题 指标包括按结果划分的请求计数 这些结果可以是 已匹配、取消或过期的结果 指标还包括达到结果所需的时间 以及队列中有多少个活跃请求 此外 还有关于 规则评估错误和结果的指标 你可以在不同的时间粒度上 获得这些指标数据 每 15 分钟一次 (持续八小时) 24 小时内每小时一次 或 30 天内每天一次
如果 Game Center 查找匹配项的时间过长 或未能找到匹配项 请参阅 Apple 开发者文档文章 使用指标对匹配规则进行故障排除
在这个例子中 查询是返回计数 以及请求队列中的时间 粒度为一天 响应包含具有 日期时间范围和指标值的 数据点 借助脚本 我可以将响应数据转换为图表 以了解我的匹配规则 是否真的有成功帮助玩家匹配
好了 以上就是基于规则的匹配的最新情况
这项新功能现已推出 希望你能善加利用 这项出色的新功能
查看 Apple 开发者文档 了解如何 使用其所有功能
我们很乐意了解你的想法 如果你对 Game Center 有任何功能请求 请通过 Apple 的“反馈助理” 告知我们 感谢大家今天的参与
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。