单机游戏如何做版本更新提醒
05/06113 浏览开发心得
我用了排行榜
问题
单机游戏没有服务端,怎么让玩家知道"该更新了"?
网游简单——服务端返回一个最新版本号,客户端比一下就行。
但单机游戏没有自己的服务端,也不想为了一个版本号专门搭一个。
我们的做法:把排行榜当版本号广播站
我们的游戏跑在一个小游戏平台上,平台提供了云变量和排行榜能力。
排行榜本来是用来做玩家积分排名的,但我们发现它天然适合干另一件事——广播最新版本号。
思路很直接:开一个专门的排行榜,每个玩家把自己的版本号当"分数"上传上去。
排行榜自动排序,榜首就是全服最高版本号。
任何玩家拉一下榜首,就知道当前最新版本是多少了。
版本号怎么变成"分数"
版本号是 v1.0.98 这样的字符串,排行榜存的是数字。所以需要一个编码规则:
主版本 × 10000 + 次版本 × 100 + 补丁号(此处可以增加主次版本号权重,可以支持更大的小版本号)
比如 v1.0.98 就是 1 × 10000 + 0 × 100 + 98 = 10098。v1.1.0 就是 10100。
只要版本号递增,编码出来的数字一定递增,排行榜排序天然成立。
检测流程
玩家启动游戏后,拉取排行榜第一名的分数,跟自己的版本号比:
如果自己的分数大于等于榜首——说明自己已经是最新的,顺手把自己的版本号上传上去(万一自己就是第一个更新的人呢)。
如果自己的分数小于榜首——说明有人在用更高的版本了,提示玩家去更新。
就这么简单。
两种检测模式
一种是玩家手动点"检查更新",弹个 Toast 告诉他结果。
另一种是后台静默检测。
游戏启动 5 秒后做第一次,之后每 10 分钟做一次。
检测到新版本不打扰玩家,只是在设置按钮上亮一个小红点,玩家注意到了自然会去看。
这个方案好在哪
零成本。
不需要额外搭服务、不需要维护一个"最新版本号"的配置。排行榜是平台现成的能力,白用。
去中心化。
不需要运营人员手动更新版本号。只要有一个玩家装了新版本并启动了游戏,他的版本号就自动上传到排行榜,其他所有玩家都能感知到。完全自驱动。
天然正确。
排行榜取最高分,版本号越新数字越大。不可能出现"新版本号比旧版本号低"的情况,因为我们的编码规则保证了单调递增。
局限性
这个方案有一个前提:你的版本号必须严格递增。
如果出现 v1.0.98 之后发了个 v1.0.97 的热修,编码出来的数字反而变小了,排行榜不会更新。
在我们的项目里这不是问题,因为版本号由构建系统自动递增管理,不会手动回退。
另一个局限是它只能告诉玩家"有新版本了",但没法帮玩家自动更新。
玩家还是得手动去平台刷新。不过对于小游戏平台来说,"点右上角三个点然后重新加载"就能拿到最新版本,成本很低。
强制更新
如果老版本有严重影响平衡性的bug,实在没办法,必须让老玩家更新,那可以加上强制更新机制。
但是不推荐使用。
打开游戏立刻弹出一个弹窗,设置层级为最高,保证弹窗不关闭玩家就无法点击任何地方,同时检测是否有新版本。
如果没有检测到新版本,则静默关闭弹窗。
如果检测到新版本,则提示玩家更新版本,弹窗不消失。
这样玩家不更新版本就没法玩游戏。
如果还要进一步强制运行中的玩家更新,则在实时检测中也加入这个机制。
如果检测到新版本直接中断游戏主update,退回到主页面并显示弹窗,这样可以强制玩家更新。
小结
用排行榜做版本检测,本质上是把排行榜当成了一个"全服最大值广播器"。
不用搭服务,不用运营介入,玩家自己就把最新版本号传播开了。
适合没有独立服务端的单机小游戏。



