設定のキャッシュ

Remote Config および Game Overrides は、設定割り当てハッシュを利用してプレイヤー設定をキャッシュします。Economy サービスは、不必要なネットワーク呼び出しを回避するために、設定割り当てハッシュを長時間キャッシュします。

設定割り当てハッシュ

設定割り当てハッシュとは何か

ConfigAssignmentHash は、Remote Config、Game Overrides および Economy プロジェクト設定における、プレイヤーのデータのスナップショットの一意識別子です。

特に Economy では、スナップショットは Economy プロジェクト設定 (アイテム定義、通貨定義など) のみを対象とし、プレイヤーの残高やインベントリは含まれません。

Cloud Code および Economy SDK での設定キャッシュ

Economy Cloud Code SDK および C# SDK で設定割り当てハッシュを使用する方法の詳細については、Game Overrides - Cloud Code および Game Overrides - Economy を参照してください。

設定割り当てハッシュへのアクセス

ある時点で、他の Unity サービスで使用するために、プレイヤーの現在の設定割り当てハッシュを取得する場合があります。ハッシュは Configuration 名前空間から取得できます。

GetConfigAssignmentHash

プレイヤーの現在の設定割り当てハッシュを文字列として取得します。存在しない場合は null を返します。

C#

EconomyService.Instance.Configuration.GetConfigAssignmentHash();

SyncConfigurationAsync

認証済みプレイヤーの最新設定をフェッチし、将来の Economy API 呼び出しのために設定割り当てハッシュを保存します。このメソッドを呼び出してから他の Economy 呼び出しを行うことを推奨します。こうすることで、正しい設定割り当てハッシュが確実に使用されます。

C#

EconomyService.Instance.Configuration.SyncConfigurationAsync();

注意事項

キャッシュされた設定割り当てハッシュのために Economy の変更が反映されない

Economy プロジェクト設定または Game Overrides に変更を加えても、Cloud Code の実行と Economy SDK 呼び出しの両方は、最後にキャッシュされた設定割り当てハッシュを使用し続けます。

この問題を回避するには、API 呼び出しを行う前に、最新の設定割り当てハッシュをフェッチするよにしてください。

Cloud Code の場合は、スクリプトまたはスクリプト内の API 呼び出しに、最新の設定割り当てハッシュをパラメーターとして渡すことを推奨します。

また、Cloud Code スクリプトの開始時に最新設定割り当てハッシュをフェッチして、スクリプト内の API 呼び出しに渡すこともできます。

Cloud Code JS 例

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;
  }
};

例外

設定割り当てハッシュが見つからないことを示す EconomyException が発生することがあります。

この例外の ReasonEconomyExceptionReason.ConfigAssignmentHashInvalid です。

これを解決するには、Configuration メソッド (例えば GetCurrenciesAsync()) のどれかを使用して再び Economy 設定をフェッチします。こうすると、更新された設定割り当てハッシュを SDK が取得でき、通常どおり呼び出しを行えるようになります。