기술 자료

지원

Economy

Economy

Cloud Code를 사용한 Economy Game Overrides

Learn how to use Game Overrides with Cloud Code to personalize your in-game Economy for specific player groups.
읽는 시간 2분최근 업데이트: 12시간 전

Game Overrides를 사용하면 게임에서 Economy를 맞춤화할 수 있습니다. 예를 들어 단기간만 시즌 세일을 제공하거나 베테랑 플레이어가 구매할 때 보상을 더 지급할 수 있습니다.

Economy에서 Game Overrides와 Config Caching이 작동하는 방식

Cloud Code와 Economy SDK에서 구성 할당 해시를 사용하는 방법에 관한 자세한 내용은 Config Caching을 참고하시기 바랍니다. Economy에서 플레이어에게 적용할 오버라이드를 알려면 클라이언트 디바이스에 어떤 오버라이드가 있는지 알아야 합니다. Economy는 구성의 일부로
configAssignmentHash
를 반환합니다.
configAssignmentHash
를 Economy에 전달하면 Economy는 디바이스의 구성과 동일한 구성을 사용하여 플레이어에게 일관된 사용자 경험을 제공할 수 있습니다.
Economy SDK 2.0.0 이상은 Economy API와 상호 작용할 때
configAssignmentHash
를 Economy에 자동으로 전달합니다. Economy SDK에서 Game Overrides를 사용하는 방법은 Economy SDK 가이드의 Game Overrides를 참고하십시오.
Economy SDK 1.0.0과 Cloud Code의 Economy SDK는
configAssignmentHash
를 Economy에 자동으로 전달하지 않습니다. Economy에
configAssignmentHash
가 파라미터로 전달되지 않을 경우 클라이언트 디바이스 구성과 일관성을 유지할 수 있는 방법이 있긴 하지만, 클라이언트 디바이스의 구성과 일치하지 않는 경우도 드물게 있습니다.

Cloud Code로 Economy Game Overrides 사용

클라이언트 디바이스에서 게임 로직을 이동하기 위해 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 }}"; }}

Pitfalls

Config Caching 참고