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 分钟最后更新于 7 个月前
通过 Game Overrides,您可以对游戏内经济进行个性化设置。例如,在短时间内提供季节性促销活动,或者在购买时给予老玩家更多的所得内容。
Game Overrides 和配置缓存如何与 Economy 结合使用
请阅读配置缓存,详细了解如何将配置分配哈希与 Cloud Code 和 Economy SDK 结合使用。
为了让 Economy 知道应该为玩家应用哪些覆盖,它必须知道客户端设备上有哪些覆盖。Economy 返回 ,作为配置的一部分。将 传递给 Economy 可确保 Economy 使用与设备上相同的配置,为玩家提供一致性的用户体验。
configAssignmentHashconfigAssignmentHash与 Economy API 交互时,Economy SDK 2.0.0 及更高版本会自动将 传递到 Economy。要了解如何在 Economy SDK 中使用 Game Overrides,请参阅 Economy SDK 指南的 Game Overrides 部分。
configAssignmentHashCloud Code 中的 Economy SDK 1.0.0 和 Economy SDK 不会自动将 传递给 Economy。如果 Economy 不接收 作为参数,它就有办法确保与客户端设备配置保持一致,但在某些特殊情况下,该配置可能与客户端设备上的配置不一致。
configAssignmentHashconfigAssignmentHash将 Economy Game Overrides 与 Cloud Code 搭配使用
使用 Cloud Code 将游戏逻辑移离客户端设备的另一种方法是使用 Cloud Code 与游戏经济进行交互。通过 Cloud Code 与 Economy 进行交互时,您需要将 传递给 Cloud Code 脚本,然后再将其传递给 Economy。SDK 有一种在客户端设备上获取 的方法。完整步骤如下:
configAssignmentHashconfigAssignmentHashCloud Code 设置
-

-
使用 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, };};
编辑器设置
-
从 Economy SDK 2.0.0 或更高版本中获取配置。string currencyID = "GOLD";CurrencyDefinition goldCurrencyDefinition = EconomyService.Instance.Configuration.GetCurrency(currencyID);
-
调用:EconomyService.Instance.Configuration.GetConfigAssignmentHash();来自 Economy SDK。
-
将步骤 2 中的传递到 Cloud Code。
configAssignmentHashawait 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 }}"; }}
陷阱
请参阅配置缓存陷阱