虚拟商店
虚拟商店是大多数免费游戏中的一个关键功能。它们允许玩家在游戏环境中购买物品和交换资源,以促进游戏内的经济。当作为核心游戏循环的一部分正确实施时,它们可以驱动玩家参与度,并为玩家提供表达他们独特的游戏风格的机会。
先决条件
要使用此示例用例,您必须在 Unity 项目中下载并安装 UGS 用例项目。
概述
要查看此用例的实际效果
- 在 Unity 编辑器项目窗口中,选择**Assets** > **Use Case Samples** > **Virtual Shops**,然后双击
VirtualShopsSample.unity
打开示例场景。 - 进入播放模式以与用例交互。
在启动时,此场景读取虚拟商店用例示例的远程配置以及所有必需的虚拟购买。它为所有货币和库存物品设置精灵,以便在商店显示中使用,用正确的数值初始化货币 HUD,并将第一个类别的虚拟购买展示给玩家购买。
初始化
当场景加载时,VirtualShopsSceneManager.cs
脚本执行以下初始化任务
初始化 Unity 游戏服务。
使用身份验证服务匿名登录玩家。如果您之前已初始化任何其他示例场景,身份验证将使用您的缓存玩家 ID,而不是创建新的 ID。
从经济服务中检索并更新玩家的货币余额。
查询远程配置服务以获取虚拟商店配置数据。这包括
- 来自 Addressables 服务的货币和库存物品精灵,以便它们可以在商店 UI 中显示。
- 用于商店的虚拟购买交易。远程配置数据决定将每个交易放在哪个类别中,以及使用哪个图标。
客户端根据远程配置数据更新商店 UI。
功能
库存按钮
右上角的库存按钮会打开一个弹出窗口,显示所有当前拥有的库存物品。使用它来确认已购买的物品已正确添加到您的库存中。请注意,库存物品以随机顺序显示,因此新购买的物品可能会出现在列表中间。
获取货币调试按钮
右上角的**+30**金币按钮用于添加货币以进行测试。
虚拟购买
商店界面显示出售的物品及其相应的成本。点击任何物品,通过经济服务尝试进行虚拟购买。一个弹出窗口将出现,以确认购买成功或失败。
**注意**:大多数游戏会禁用用户无法支付的购买按钮。但是,此示例允许您尝试所有购买,无论是否支付,以方便测试经济服务如何验证虚拟购买。
类别按钮
您可以通过点击购买网格左侧的选项卡来更改购买类别。在**货币**、**物品**和**IAP**之间进行选择,以显示由远程配置 JSON 指定的相应购买列表。
**注意**:此示例目前不提供**IAP**类别。
后退按钮
按下左上角的后退按钮,将返回到“入门”场景。
设置
要求
要复制此用例,您需要在项目中使用以下Unity 包
包 | 角色 |
---|---|
Addressables | 允许开发人员通过其地址请求资源。无论资源位于何处(本地或远程),系统都会找到它及其依赖项,然后返回它。 |
分析 | 发送事件,使您能够跟踪玩家的游戏内交互、留存率以及您可以用来分析和改进游戏体验的其他信息。 |
身份验证 | 自动匿名登录用户,以跟踪服务器端的数据。 |
部署 | 为云服务提供一个连贯的界面来部署资源。 |
经济 | 跟踪玩家的货币和库存物品,以及所有货币、库存物品和虚拟购买交易的定义。货币和库存物品都包含自定义数据,以识别在商店中使用的哪个图标精灵。 |
远程配置 | 提供键值对,其中映射到给定键的值可以在服务器端更改,无论是手动更改还是基于特定游戏覆盖更改。SHOPS_CONFIG 条目存储所有虚拟购买交易的详细信息,以便在每个类别中可用。 |
要在游戏中使用这些服务,请在Unity 云控制台中为您的组织和项目激活每个服务。
Unity 云服务配置
要在您自己的 Unity 项目中复制此示例场景的设置,请配置以下项目
- 经济物品
- 远程配置值
要配置这些项目,您可以使用部署包,或使用 Unity 云控制台手动输入它们。推荐的最佳做法是使用部署包,因为它可以大大加快此过程。
使用部署包
要使用部署包部署配置
- 打开部署窗口。
- 选中
Common
和Virtual Shop
。 - 点击
Deploy Selection
。
这将部署所有必要的项目。
使用 Unity 云控制台
您可以使用Unity 云控制台按项目和环境手动配置您的服务。请参阅以下部分以配置此示例。
经济
在 Unity 云控制台中配置以下资源
资源类型 | 资源项目 | ID | 自定义数据 * | 描述 |
---|---|---|---|---|
货币 | 金币 | COIN |
| 您可以在虚拟商店中花费和购买的货币。 |
货币 | 宝石 | GEM |
| 您可以在虚拟商店中花费的货币。 |
货币 | 珍珠 | PEARL |
| 您可以在虚拟商店中购买的货币。 |
货币 | 星星 | STAR |
| 您可以在虚拟商店中购买的货币。 |
库存物品 | 剑 | SWORD |
| 您可以在虚拟商店中购买的物品。 |
库存物品 | 盾牌 | SHIELD |
| 您可以在虚拟商店中购买的物品。 |
* 此示例使用 Addressable Assets 来实现所有经济资源的精灵图标。作为开发人员,您可以将每个货币的图标的 Addressables 地址直接添加到经济控制台中,然后在运行时检索它,而无需更改您的代码。例如,如果您想通过更改控制台中的地址来更新货币图标,而不是更新您的应用程序,这将非常有用。要为每个资源执行此操作
- 选择要编辑的货币。
- 在**自定义数据**下,点击加号 (**+**) 图标以添加自定义 JSON 脚本。
- 添加
spriteAddress
值,以及表格中列出的相应 Addressable 地址字符串。
当客户端需要初始化精灵(例如,在商店中显示每个虚拟购买的成本和奖励)时,资源的 ID 充当字典键,可以快速找到相关的精灵。客户端在启动时调用 AddressablesManager.cs
脚本的 PreloadAllEconomySprites()
方法,使用所有图标精灵初始化字典,preloadedSpritesByEconomyId
字典用于查找经济 ID 以找到与商店显示中使用的相关精灵。
此外,为商店配置以下虚拟购买
商品名称 | ID | 此购买获得 | 此购买花费 |
---|---|---|---|
1 把剑换硬币 | 1_SWORD_FOR_COINS | 剑 (1) | 硬币 (15) |
2 把剑换硬币 | 2_SWORD_FOR_COINS | 剑 (2) | 硬币 (25) |
3 把剑换硬币 | 3_SWORD_FOR_COINS | 剑 (3) | 硬币 (30) |
1 个盾牌换硬币 | 1_SHIELD_FOR_COINS | 盾牌 (1) | 硬币 (10) |
2 个盾牌换硬币 | 2_SHIELD_FOR_COINS | 盾牌 (2) | 硬币 (15) |
3 个盾牌换硬币 | 3_SHIELD_FOR_COINS | 盾牌 (3) | 硬币 (20) |
100 个硬币换宝石 | 100_COIN_FOR_GEMS | 硬币 (100) | 宝石 (7) |
250 个硬币换宝石 | 250_COIN_FOR_GEMS | 硬币 (250) | 宝石 (15) |
1000 个硬币换宝石 | 1000_COIN_FOR_GEMS | 硬币 (1000) | 宝石 (25) |
1 星星换硬币 | 1_STAR_FOR_COINS | 星星 (1) | 硬币 (25) |
3 颗珍珠换硬币 | 3_PEARL_FOR_COINS | 珍珠 (3) | 硬币 (50) |
远程配置
在 Unity Cloud Dashboard 中设置以下配置值
键 | 类型 | 描述 | 值 |
---|---|---|---|
SHOP_CONFIG | JSON | 包含有关虚拟购买及其在商店中显示位置的信息。 | 请参阅以下 JSON 代码段。 |
SHOP_CONFIG JSON 值
{
"categories": [{
"id": "Items",
"enabledFlag": true,
"items": [{
"id": "1_SWORD_FOR_COINS"
}, {
"id": "2_SWORD_FOR_COINS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}, {
"id": "3_SWORD_FOR_COINS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}, {
"id": "1_SHIELD_FOR_COINS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}, {
"id": "2_SHIELD_FOR_COINS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}, {
"id": "3_SHIELD_FOR_COINS",
"color": "#FFFFFFFF",
"badgeIconAddress": "Sprites/Badges/Banner",
"badgeColor": "#FF0000FF",
"badgeText": "Best Value",
"badgeTextColor": "#FFFFFFFF"
}]
}, {
"id": "Currencies",
"enabledFlag": true,
"items": [{
"id": "100_COIN_FOR_GEMS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}, {
"id": "250_COIN_FOR_GEMS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}, {
"id": "1000_COIN_FOR_GEMS",
"color": "#FFFFFFFF",
"badgeIconAddress": "Sprites/Badges/Banner",
"badgeColor": "#FF0000FF",
"badgeText": "Best Value",
"badgeTextColor": "#FFFFFFFF"
}, {
"id": "1_STAR_FOR_COINS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}, {
"id": "3_PEARL_FOR_COINS",
"color": "#FFFFFFFF",
"badgeIconAddress": ""
}]
}, {
"id": "IAP",
"enabledFlag": false,
"items": []
}]
}