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 返回configAssignmentHashconfigAssignmentHashconfigAssignmentHashconfigAssignmentHashconfigAssignmentHash将 Economy Game Overrides 与 Cloud Code 搭配使用
使用 Cloud Code 将游戏逻辑移离客户端设备的另一种方法是使用 Cloud Code 与游戏经济进行交互。通过 Cloud Code 与 Economy 进行交互时,您需要将configAssignmentHashconfigAssignmentHashCloud Code 设置
-
使用 作为参数设置 Cloud Code 脚本。
configAssignmentHash
-
使用 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);
-
调用:
来自 Economy SDK。EconomyService.Instance.Configuration.GetConfigAssignmentHash(); -
将步骤 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 }}"; }}