搜索 Unity

Unity Gaming Services Use Cases:全新战斗通行证样例

2022年4月22日 类别 游戏 | 11 分 阅读
Battle Pass Sample Header
Battle Pass Sample Header
分享

Is this article helpful for you?

Thank you for your feedback!

Unity Gaming Services (UGS) Use Cases样例组的主要作用在于展示多种UGS产品在面对常见游戏开发挑战时的作用。

每一个样例都会采用典型的游戏后端和游戏设计,以此来演示特定开发任务的解决方法,并着重展示了UGS产品在集成到游戏后端后所带来的高效率。

我们其中的一个样本就演示了战斗通行证:一种包含免费奖励和付费奖励的分层季节性奖励系统。本文将解释该样例的原理及其实际应用的方式。 

什么是UGS Use Cases?

正在持续更新中的UGS Use Cases可以被下载到Unity编辑器中运行。你可以参考项目中的代码来学习各种Unity Gaming Services的应用方法。

Use Cases项目的主要目标是借助可运行的实例来帮助开发者更快地升级自己的项目。样例的代码清晰明了,所有水平的开发者都能轻松地阅读并理解。

什么是战斗通行证?

最近愈发流行的战斗通行证是一种用游戏奖励来留住玩家、用付费奖励提高游戏长期收入的机制。

它一般可以拆解成以下几步:

  • 玩家在进行游戏的过程中获得积分,用于解锁越来越珍贵的奖励。
  • 厂商一般会设置两条并行的奖励路线:
    • 一条是所有玩家都可以领取的免费奖励。
    • 另一条更为高级的奖励则需要通过购买通行证解锁,购买通常使用游戏代币完成。
  • 一条奖励路线仅会在限定时间内可用,时限通常为一个“赛季”。
Battle Pass screen

样例的工作原理?

对于在线游戏,尤其是多人游戏,服务器应该主宰着大部分玩家数据的裁定权。 

这么做可以有效防止作弊,让一个玩家掌握不公平的优势或非法获取那些本需购买或赚取的物品及代币。 

同理,为了保证季节性奖励和通行证的公平性,所有的数据及其修改都必须由服务器进行管理。 

在本样例中,Cloud Code (beta)服务解决了绝大部分后端基础设施相关的任务。Cloud Code支持用户远程编写和运行游戏逻辑。

本样例还用到了支持上传玩家存档至云端的Cloud Save (beta),以及不少其他工具。此时,每名玩家的赛季进度都可以被存储到一个扁平化键值系统中。而赛季每一条通行证奖励的所有权标签也会被储存到Cloud Save里。

Game Overrides(由Remote Config驱动)支持让开发者个性化玩家体验,并编排当前赛季的内容和战斗通行证的等级。

战斗通行证的所有奖励等级,即游戏代币及物品,都是用Economy (beta)管理的。我们还用Economy设置了一项用宝石换取通行证的购买选项。

和所有用线上后端管理玩家数据的游戏一样,玩家要想开始游戏就必须用账号登录。为了实现这个功能,我们使用了Authentication (beta)。当用户登录时,UGS的SDK将自动在每次服务器请求中加上玩家独特的ID。

本样例的工作原理如下:

  • 客户端从Game Overrides或Cloud Code(只读)获取季节性奖励的配置数据。客户端使用这些数据来生成UI。Cloud Code将根据数据来决定玩家所能领取的等级奖励。
  • Cloud Save将跟踪玩家的奖励路线等级。两条互不干涉的奖励路线将被赋予三种可能的状态(值):锁定(Locked)、解锁(Unlocked)或已领取(Claimed)。
  • Cloud Save还存有一个专门值用以判定玩家是否已经购买了通行证。
Battle Pass blog diagram

客户端可以直接用Cloud Save获取并设置玩家状态,但此方法在这里并不适用。

允许客户端直接修改Cloud Save数据会导致游戏变成客户端权威,而非服务器权威,这就为黑客们打开了方便之门。而在使用Cloud Code时,我们可以在数据写入Cloud Save之前验证其改动。

此外,直接从Cloud Save中读取玩家状态可能会导致游戏错误地读取前一个赛季的数据。而在有了Cloud Code时,我们就可以在赛季结束时自动重置玩家的通行证等级。

怎样在你自己的游戏中应用“战斗通行证”

本样例提供了一个功能齐全、服务器权威的UGS战斗通行证应用实例。

季节性奖励与Game Overrides

Game override

你可以在Unity Dashboard中发起一次Game Overrides活动并用JSON进行设置,以此来确定某段时间内的通行证配置。 

一次活动的时间跨度并不受限,你既可以举办一个小时、一次周末的特别活动,也可以举行持续几个月的赛季通行证活动。

Cloud Code的服务器权威游戏逻辑

玩家通过与游戏UI的互动来向Cloud Code发送以下请求:

  • 获取赛季XP

  • 领取奖励

  • 购买战斗通行证

  • 记录玩家赛季进度

  • 将进度数据返回给游戏客户端

其中一些调用更是可以直接发送给EconomyCloud Code。在有这么多请求类型时,如果赛季已经更替或是玩家刚刚接触游戏,你还需要重新初始化玩家的赛季进度。 

并且客户端不可能在每次发出请求之前都判定一次赛季数据是否需要初始化。

在该样例中,玩家在升级通行证(并且已经领取完免费奖励)后,过去累积的奖励会被自动赠与。正因为如此,购买战斗通行证只能用一段Cloud Code的函数处理。 

该函数会呼叫Economy完成一次有费用但无奖励的购买。如果购买成功,有两件事会发生:

  • 通行证将以Cloud Save值的形式被授予给玩家,这个值只能代表当前赛季的战斗通行证。

  • 玩家将获取所以已经达成的通行证等级奖励。

战斗通行证的更多可能

季节性奖励和战斗通行证有许多的设计可能——Unity Gaming Service并不会限制你的用途。

  • 你可以自行确定奖励等级的规划,有些等级不一定要包含免费奖励。或者,你比起线性的奖励路线更喜欢一种更复杂的系统:让玩家自由地在奖励页面选择自己的奖励组成,在全部达成后解锁下一页。UGS支持几乎所有复杂度的战斗通行证。 
  • 在这个样例中,大部分奖励都是游戏代币,但多人游戏更为常见的奖励是饰品。你可以根据游戏联机与否来设计战斗通行证。

也可以使用Unity In-app Purchase软件包来应用现金付款,取代游戏代币。

Unity Gaming Services Use Cases

Unity Gaming Services的Use Cases集合除了通行证外还包含了其他几种样例

  • 战利品箱(loot boxes):用Cloud Code随机奖励玩家Economy上的代币/通货。
  • 每日奖励(daily rewards):定期奖励玩家随机的代币和物品集。
  • 新手包(Starter Pack):用Cloud Code向玩家提供一次性的新手包购买机会。
  • 季节性事件(seasonal events):远程更新限时性的特殊游戏内容。
  • 关卡难度的A/B测试:用玩家分组测试并找出最吸引人的游戏变量(这里是升级所需的XP量)。
  • 放置点击小游戏:像放置游戏那样实时更新服务器的权威游戏状态。
  • 云端AI小游戏:在服务器权威的简单井字棋游戏中对抗具备持久性状态、代币奖励和玩家数据、运行于UGS上的简单AI。
  • 命令批处理: 将游戏命令归入一个队列在服务器上一次性执行,减少游戏过程中呼叫服务器的数量和频率。

请时不时地来看看我们的GitHub仓库,这个项目将继续发展并推出更多的UGS用例。

2022年4月22日 类别 游戏 | 11 分 阅读

Is this article helpful for you?

Thank you for your feedback!