配置缓存
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
以字符串形式检索玩家的当前配置分配哈希。如果不存在则返回nullEconomyService.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; }};
异常
您可能会遇到EconomyExceptionReasonEconomyExceptionReason.ConfigAssignmentHashInvalidConfigurationGetCurrenciesAsync()