Unity Gaming Services (UGS) Use Cases样例组的主要作用在于展示多种UGS产品在面对常见游戏开发挑战时的作用。
每一个样例都会采用典型的游戏后端和游戏设计,以此来演示特定开发任务的解决方法,并着重展示了UGS产品在集成到游戏后端后所带来的高效率。
我们其中的一个样本就演示了战斗通行证:一种包含免费奖励和付费奖励的分层季节性奖励系统。本文将解释该样例的原理及其实际应用的方式。
正在持续更新中的UGS Use Cases可以被下载到Unity编辑器中运行。你可以参考项目中的代码来学习各种Unity Gaming Services的应用方法。
Use Cases项目的主要目标是借助可运行的实例来帮助开发者更快地升级自己的项目。样例的代码清晰明了,所有水平的开发者都能轻松地阅读并理解。
最近愈发流行的战斗通行证是一种用游戏奖励来留住玩家、用付费奖励提高游戏长期收入的机制。
它一般可以拆解成以下几步:
对于在线游戏,尤其是多人游戏,服务器应该主宰着大部分玩家数据的裁定权。
这么做可以有效防止作弊,让一个玩家掌握不公平的优势或非法获取那些本需购买或赚取的物品及代币。
同理,为了保证季节性奖励和通行证的公平性,所有的数据及其修改都必须由服务器进行管理。
在本样例中,Cloud Code (beta)服务解决了绝大部分后端基础设施相关的任务。Cloud Code支持用户远程编写和运行游戏逻辑。
本样例还用到了支持上传玩家存档至云端的Cloud Save (beta),以及不少其他工具。此时,每名玩家的赛季进度都可以被存储到一个扁平化键值系统中。而赛季每一条通行证奖励的所有权标签也会被储存到Cloud Save里。
Game Overrides(由Remote Config驱动)支持让开发者个性化玩家体验,并编排当前赛季的内容和战斗通行证的等级。
战斗通行证的所有奖励等级,即游戏代币及物品,都是用Economy (beta)管理的。我们还用Economy设置了一项用宝石换取通行证的购买选项。
和所有用线上后端管理玩家数据的游戏一样,玩家要想开始游戏就必须用账号登录。为了实现这个功能,我们使用了Authentication (beta)。当用户登录时,UGS的SDK将自动在每次服务器请求中加上玩家独特的ID。
本样例的工作原理如下:
客户端可以直接用Cloud Save获取并设置玩家状态,但此方法在这里并不适用。
允许客户端直接修改Cloud Save数据会导致游戏变成客户端权威,而非服务器权威,这就为黑客们打开了方便之门。而在使用Cloud Code时,我们可以在数据写入Cloud Save之前验证其改动。
此外,直接从Cloud Save中读取玩家状态可能会导致游戏错误地读取前一个赛季的数据。而在有了Cloud Code时,我们就可以在赛季结束时自动重置玩家的通行证等级。
本样例提供了一个功能齐全、服务器权威的UGS战斗通行证应用实例。
你可以在Unity Dashboard中发起一次Game Overrides活动并用JSON进行设置,以此来确定某段时间内的通行证配置。
一次活动的时间跨度并不受限,你既可以举办一个小时、一次周末的特别活动,也可以举行持续几个月的赛季通行证活动。
玩家通过与游戏UI的互动来向Cloud Code发送以下请求:
获取赛季XP
领取奖励
购买战斗通行证
记录玩家赛季进度
将进度数据返回给游戏客户端
其中一些调用更是可以直接发送给Economy或Cloud Code。在有这么多请求类型时,如果赛季已经更替或是玩家刚刚接触游戏,你还需要重新初始化玩家的赛季进度。
并且客户端不可能在每次发出请求之前都判定一次赛季数据是否需要初始化。
在该样例中,玩家在升级通行证(并且已经领取完免费奖励)后,过去累积的奖励会被自动赠与。正因为如此,购买战斗通行证只能用一段Cloud Code的函数处理。
该函数会呼叫Economy完成一次有费用但无奖励的购买。如果购买成功,有两件事会发生:
通行证将以Cloud Save值的形式被授予给玩家,这个值只能代表当前赛季的战斗通行证。
玩家将获取所以已经达成的通行证等级奖励。
季节性奖励和战斗通行证有许多的设计可能——Unity Gaming Service并不会限制你的用途。
也可以使用Unity In-app Purchase软件包来应用现金付款,取代游戏代币。
Unity Gaming Services的Use Cases集合除了通行证外还包含了其他几种样例。
请时不时地来看看我们的GitHub仓库,这个项目将继续发展并推出更多的UGS用例。