文档

支持

Economy

Economy

Economy Game Overrides 与 Cloud Code

Learn how to use Game Overrides with Cloud Code to personalize your in-game Economy for specific player groups.
阅读时间3 分钟最后更新于 15 天前

通过 Game Overrides,您可以对游戏内经济进行个性化设置。例如,在短时间内提供季节性促销活动,或者在购买时给予老玩家更多的所得内容。

Game Overrides 和配置缓存如何与 Economy 结合使用

请阅读配置缓存,详细了解如何将配置分配哈希与 Cloud Code 和 Economy SDK 结合使用。 为了让 Economy 知道应该为玩家应用哪些覆盖,它必须知道客户端设备上有哪些覆盖。Economy 返回
configAssignmentHash
,作为配置的一部分。将
configAssignmentHash
传递给 Economy 可确保 Economy 使用与设备上相同的配置,为玩家提供一致性的用户体验。
与 Economy API 交互时,Economy SDK 2.0.0 及更高版本会自动将
configAssignmentHash
传递到 Economy。要了解如何在 Economy SDK 中使用 Game Overrides,请参阅 Economy SDK 指南的 Game Overrides 部分。
Cloud Code 中的 Economy SDK 1.0.0 和 Economy SDK 不会自动将
configAssignmentHash
传递给 Economy。如果 Economy 不接收
configAssignmentHash
作为参数,它就有办法确保与客户端设备配置保持一致,但在某些特殊情况下,该配置可能与客户端设备上的配置不一致。

将 Economy Game Overrides 与 Cloud Code 搭配使用

使用 Cloud Code 将游戏逻辑移离客户端设备的另一种方法是使用 Cloud Code 与游戏经济进行交互。通过 Cloud Code 与 Economy 进行交互时,您需要将
configAssignmentHash
传递给 Cloud Code 脚本,然后再将其传递给 Economy。SDK 有一种在客户端设备上获取
configAssignmentHash
的方法。完整步骤如下:

Cloud Code 设置

  1. 使用
    configAssignmentHash
    作为参数设置 Cloud Code 脚本
    Add a Script(添加脚本)对话框的屏幕截图,其中包含已添加的参数。
  2. 使用 Economy SDK 2.2 或更高版本在 Cloud Code 中添加调用 Economy 的脚本。
    /* * -------- Example Cloud Code Script -------- * * Ensure consistency when using Game Overrides with Economy * * -------------------------------------------- */const { CurrenciesApi } = require("@unity-services/economy-2.2");/* * CommonJS wrapper for the script. It receives a single argument, which can be destructured into: * - params: Object containing the parameters provided to the script, accessible as object properties * - context: Object containing the projectId, environmentId, environmentName, playerId and accessToken properties. * - logger: Logging client for the script. Provides debug(), info(), warning() and error() log levels. */module.exports = async ({ params, context, logger }) => { // Log an info message with the parameters provided to the script and the invocation context logger.info("Script parameters: " + JSON.stringify(params)); logger.info("Authenticated within the following context: " + JSON.stringify(context)); const { projectId, playerId, accessToken } = context; const { currencyId, configAssignmentHash } = params; const currencies = new CurrenciesApi({ accessToken }); const increment = await currencies.incrementPlayerCurrencyBalance({ projectId, playerId, currencyId, configAssignmentHash, currencyModifyBalanceRequest: { currencyId, amount: 10 } }); logger.info("Increment data result: " + JSON.stringify(increment.data)); // Return the JSON result to the client return { newBalance: increment.data.balance, };};

编辑器设置

  1. 从 Economy SDK 2.0.0 或更高版本中获取配置
    string currencyID = "GOLD";CurrencyDefinition goldCurrencyDefinition = EconomyService.Instance.Configuration.GetCurrency(currencyID);
  2. 调用:
    EconomyService.Instance.Configuration.GetConfigAssignmentHash();
    来自 Economy SDK。
  3. 将步骤 2 中的
    configAssignmentHash
    传递到 Cloud Code
    await CloudCode.CallEndpointAsync<NewBalance>("AddCurrency", new IncrementBalanceParam(currencyId, configAssignmentHash));

完整示例

public async Task<int> IncrementCurrency(){ var goldCurrencyId = "GOLD"; EconomyService.Instance.Configuration.GetCurrency(goldCurrencyId); var configAssignemntHash = EconomyService.Instance.Configuration.GetConfigAssignmentHash(); var newBalance = await CallIncrementCurrencyEndpoint(goldCurrencyId, configAssignemntHash); return newBalance;}public async Task<int> CallIncrementCurrencyEndpoint(string currencyId, string configAssignmentHash){ var newBalanceResult = await CloudCode.CallEndpointAsync<NewBalance>( "AddCurrency", new IncrementBalanceParam(currencyId, configAssignmentHash)); return newBalanceResult.newBalance;}public class NewBalance{ public int newBalance;}[Serializable]public class IncrementBalanceParam{ public string currencyId; public string configAssignmentHash; public IncrementBalanceParam(string currencyId, string configAssignmentHash) { this.currencyId = currencyId; this.configAssignmentHash = configAssignmentHash; } public override string ToString() { return $"{{\"currencyId\": @currencyId, \"configAssignmentHash\": @configAssignmentHash }}"; }}

陷阱

请参阅配置缓存陷阱