Steamworks 文献库
基于技术的游戏匹配
Steam 游戏匹配 API 可基于玩家技术提供丰富的匹配选项。
了解更多匹配基础工具组的详细信息,请见此处

概览

多人游戏用户匹配中的一个常见问题就是,如何找到技术水平或游戏风格相似的用户,以确保他们能充分体验每一场比赛。 为解决上述问题,Steamworks 在 Steam 大厅系统中提供了丰富的比赛搜索选项与统计 API。

游戏匹配流程

一般匹配玩家的模式有以下几种:
  1. 用户在游戏中选择多人游戏以及多人游戏的种类(如:规则或情境等等)。 同时设定他们想与之匹配的技术水平。
  2. 游戏会利用大厅搜索 API 寻找规则相同的大厅。 参数之一即为用户想与之匹配的技术水平。
  3. 如果找到大厅,游戏便会让用户加入该大厅;如果找不到,便会创建新大厅。
  4. 大厅所有者接着便能根据大厅内用户的平均技术水平(或通过其他功能),更新大厅的技术设置。
  5. 比赛一旦结束,每位用户的技术值统计数据便可更新。

为玩家创建与更新技术值

想为玩家设置一项技术,需要在统计 API 页面中创建详细的新统计数据。 如有需要,您也可以设置多个统计数据用来追踪多个技术轴。 最好把统计设为“仅限增量”,代表 Steam 服务器将限制技术统计数据只能增加,防止用户将其自身标记为低技术水平,方便其与实力较弱的对手匹配。 数字范围完全可大可小,0-100 之间为常态,但非必须。 搜索或设置一场比赛时,您需要用到这些技术统计数据;比赛结束时,也需要更新这些数据。 可能的话,强烈建议您将这些数据设成仅由“官方游戏服务器”设置,防止玩家自行篡改。

步骤:
  1. 在 Steamworks 游戏管理页面,在您游戏的“统计”选项卡下,为想追踪的每个技术轴创建“仅限增量“的统计数据。
  2. 在您的游戏中,通过调用 ISteamUserStats::GetStat 获取用户的每项技术统计数据,在进行游戏匹配时用来获取数值。
  3. 比赛结束后,先调用 ISteamUserStats::SetStat、再调用 ISteamUserStats::StoreStats 来更新各项统计数据。

按技术匹配游戏会话

为特定技术水平的用户创建大厅,一旦大厅创建完成,所有者应调用 ISteamMatchmaking::SetLobbyData 来将玩家的技术数据添加至大厅的元数据中。 当其他用户利用大厅搜索 API 寻找游戏会话时,搜索人可以利用ISteamMatchmaking::AddRequestLobbyListNearValueFilter 来找寻技术水平与自己相当的大厅。 返回的结果将根据最佳匹配进行排序。 如果您的技术衡量指标不只一个,可以选择添加多个近似筛选,并让之前设置的近似筛选在排序时优先显示。 您也可以指定搜索技术的最小值或最大值。

少量搜索结果的应对

搜索结果不多可能是其他游戏匹配系统的常见问题,找到一个结果都已经相当困难,更不用谈匹配适当与否。 此问题常见于例如即时战略(RTS)的多人游戏中,这种游戏会话的开始与结束时间明确,期间不允许玩家加入, 因为同一时间进行搜索的用户人数可能非常少。 Steam 的解决办法是让每一场比赛的搜索时间都非常短暂,通常几百毫秒后便返回搜索结果。 这意味着您可以从一个相当严格的筛选器开始,然后通过连续的搜索扩展范围。 借由扩大时间范围来提升找到好匹配的机率,同时游戏仍旧控制用户开始游戏前等待进行匹配时间的长短。

按游戏风格匹配

Steamworks 游戏匹配并未限制数量,您可以指明多个搜索关键词。 这让您得以尝试按游戏风格进行匹配,或针对不同游戏模式有不同的技术衡量。 您可以将衡量数据存储于不同的统计数据中、在已创建的大厅中设置多个关键词或为搜索新增近似子句。