文档

支持

Economy

Economy

配置缓存

Understand how Economy caches configurations to ensure consistency across player devices.
阅读时间2 分钟最后更新于 2 天前

Remote Config 和 Game Overrides 利用配置分配哈希来缓存玩家配置。Economy 服务将配置分配哈希缓存数小时,以避免不必要的网络调用。

配置分配哈希

配置分配哈希代表什么?

ConfigAssignmentHash 是 Remote Config、Game Overrides 和 Economy 项目配置中玩家数据快照的唯一标识符。 具体对于 Economy 来说,快照仅针对 Economy 项目配置(物品定义、货币定义等),而不针对玩家的余额或背包。

使用 Cloud Code 和 Economy SDK 配置缓存

请参阅 Game Overrides - Cloud code Game Overrides - Economy,详细了解如何通过 Economy Cloud Code SDK 和 C# SDK 使用配置分配哈希缓存。

访问配置分配哈希

在某些时候,您可能想要检索玩家当前的配置分配哈希,以便将其与其他 Unity 服务一起使用。您可以从配置命名空间获取该哈希值。

GetConfigAssignmentHash

以字符串形式检索玩家的当前配置分配哈希。如果不存在则返回
null
EconomyService.Instance.Configuration.GetConfigAssignmentHash();

SyncConfigurationAsync

获取经过身份验证的玩家的最新配置,并在本地保存配置分配哈希以供以后进行 Economy API 调用。在进行其他 Economy 调用之前,最好先调用本方法,以确保使用正确的配置分配哈希。
EconomyService.Instance.Configuration.SyncConfigurationAsync();

陷阱

由于缓存配置分配哈希,Economy 的相关更改无法得到体现

当您对 Economy 项目配置或 Game Overrides 进行更改时,Cloud Code 执行和 Economy SDK 调用将继续使用其最近缓存的配置分配哈希。 您可以通过确保在进行任何 API 调用之前获取最新的配置分配哈希来规避此问题。 对于 Cloud Code,您可能需要将最新的配置分配哈希作为参数传递给脚本和脚本内的 API 调用。 您也可以在 Cloud Code 脚本开始时获取最新的配置分配哈希,并将其传递给脚本内的 API 调用。
const { CurrenciesApi, ConfigurationApi } = require("@unity-services/economy-2.4");module.exports = async ({ params, context, logger }) => { const currenciesApi = new CurrenciesApi({ accessToken: context.accessToken }); const configApi = new ConfigurationApi({ accessToken: context.accessToken }); const currencyId = "COIN"; try { // Retrieve the player config to get the configAssignmentHash. // This is needed to ensure the currency is synced var config = await configApi.getPlayerConfiguration({ playerId: context.playerId, projectId: context.projectId, }); const result = await currenciesApi.incrementPlayerCurrencyBalance({ currencyId, playerId: context.playerId, projectId: context.projectId, configAssignmentHash: config.data.metadata.configAssignmentHash, currencyModifyBalanceRequest: { amount: 10 }, }); return result.data; } catch (err) { logger.error("Failed to increment currency for player", { "error.message": err.message }); return; }};

异常

您可能会遇到
EconomyException
,提示您未找到配置分配哈希。
此异常的
Reason
EconomyExceptionReason.ConfigAssignmentHashInvalid
要解决这个问题,请使用一种
Configuration
方法(例如
GetCurrenciesAsync()
)再次获取 Economy 配置。这样,SDK 就会获得刷新后的配置分配哈希,这样您就可以正常调用了。