メインコンテンツまでスキップ

ゲーム内設定をゲームレコードに保存する

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

概要

Cloud Save サービスを使用すると、ゲームのユースケースに応じて、ゲームデータを JSON 形式で保存できます。保存されるゲームレコードは、グローバルタイトル用途であり、プレイヤーがアクセス可能で、場合によっては編集可能です。例えば、以下のようなデータを保存します:

  • ゲームのシーズン UI テーマ設定
  • ゲームイベントやニュース情報
  • クラン、エリア、マップなどのプレイヤーの集合的なゲームデータ

このガイドでは、ゲームレコードを利用してゲームデータを保存し、ゲームクライアント内で表示し、ユースケースに応じて変更する方法を学びます。

目標

  • ゲームレコードの概要を理解する
  • ゲームレコードにゲームデータを保存する方法を理解する
  • ゲームレコードを表示する方法を理解する
  • ゲームレコードを変更する方法を理解する
  • ゲームレコードを削除する方法を理解する
  • AccelByte SDK を使用してゲームレコードを活用する方法を学ぶ

前提条件

以下へのアクセスが必要です:

  • Admin Portal
  • AccelByte Unreal または Unity SDK、以下の権限を含む:
    • Client ID
    • Client Secret
  • AccelByte Cloud Save API ドキュメント

新しいゲームレコードにデータを保存する

Admin Portal 経由で新しいゲームレコードにデータを保存する

Admin Portal 経由でゲームレコードを作成することは、ゲームクライアントによって変更される必要がなく、ゲームクライアントによって取得されるだけのデータを保存したい場合に適しています。例: シーズン UI テーマ設定、イベント/ニュース情報など。

ゲームレコードを作成するには、以下の手順に従ってください:

  1. Admin Portal のサイドバーで、Progression & Inventory > Cloud Save メニューに移動し、Game Records を選択します。

  2. Cloud Save ページで、Game Records タブを開き、Create Game Record ボタンをクリックします。Add Record フォームが表示されます。

  3. 必要な情報を入力します:

    The Add Record form

    • 適切な形式を使用して Game Record Key を入力します。これをレコードのタイトルとして使用でき、後で SDK からレコードを取得するための識別子として使用できます。
    • Write Permission セクションで選択することで、ゲームサーバーまたはゲームクライアントのみがレコードを更新できるように追加の検証を追加することもできます。利用可能なオプションの完全なリストについては、Write Permission を参照してください。
    • JSON 形式で保存したいデータを追加します。
  4. Add をクリックします。新しいレコードがレコードリストに追加されます。

    The Add Record button

SDK を使用して新しいゲームレコードにデータを保存する

これは、ゲームクライアントから何らかのアクションがトリガーされた後に動的に作成されるゲームレコードが必要な場合に適しています。例として、公開のカスタマイズ可能なマップデータを保存します。以下の関数を使用して新しいゲームレコードを作成することでデータを保存します。

クライアント経由でゲームレコードを作成する

FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();

FString Key = FString("map-data");

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=125;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=115,Y=225,Z=120"));

ApiClient->CloudSave.SaveGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SaveGameRecord fails
}));

サーバー経由でゲームレコードを作成する

FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();

FString Key = FString("map-data");

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=125;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=115,Y=225,Z=120"));

ServerApiClient->ServerCloudSave.SaveGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SaveGameRecord fails
}));

サーバー経由で一時的なゲームレコードを作成する

FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();

FString Key = FString("map-data");

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=125;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=115,Y=225,Z=120"));

FTTLConfig TTLConfig{};
TTLConfig.Action = EAccelByteTTLConfigAction::DELETE_RECORD;
TTLConfig.Expires_At = FDateTime::UtcNow() + FTimespan(0, 0, 5); // Will delete this record in the next five seconds

ServerApiClient->ServerCloudSave.SaveGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SaveGameRecord fails
})
, TTLConfig);

サーバー経由でゲームレコードの有効期限を削除する

FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();

FString Key = FString("map-data");

ServerApiClient->ServerCloudSave.DeleteGameRecordTTLConfig(Key, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteGameRecordTTLConfig was successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteGameRecordTTLConfig fails
}));

ゲームレコードデータを表示する

Admin Portal またはゲームクライアントから保存および作成されたゲームレコードは、すべてのプレイヤーが取得できます。そのデータを使用して、ゲームのユースケースをサポートするために何でもできます。例として、シーズンテーマの UI を置き換えるためにデータを使用したり、更新されたニュースやイベントを表示するためにデータを表示したりします。

以下の関数を使用してゲームレコードを取得できます:

クライアント経由でゲームレコードを取得する

FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();

FString Key = FString("inGameNews");

ApiClient->CloudSave.GetGameRecord(Key
, THandler<FAccelByteModelsGameRecord>::CreateLambda([](const FAccelByteModelsGameRecord& Result)
{
// Do something if GetGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if GetGameRecord fails
}));

サーバー経由でゲームレコードを取得する

FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();

FString Key = FString("inGameNews");

ServerApiClient->ServerCloudSave.GetGameRecord(Key
, THandler<FAccelByteModelsGameRecord>::CreateLambda([](const FAccelByteModelsGameRecord& Result)
{
// Do something if GetGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if GetGameRecord fails
}));

ゲームレコードデータを変更する

Admin Portal 経由でゲームレコードを変更する

Admin Portal からゲームレコードを変更することは、データを調整するために手動でアクションを実行したい場合に適しています。例として、データの修正、監査などがあります。ゲームレコードを更新するには、以下の手順に従ってください:

  1. Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Game Records に移動します。

  2. Game Records ページで、レコードタイプに応じて、JSON または Binary タブを開きます。リストから、更新したいレコードを見つけて表示します。

    The records list

  3. レコードの詳細ページで、フィールドまたはセクションの鉛筆または編集アイコンをクリックして、コンテンツを更新します。

    The edit icon

  4. 変更を保存します。

    The save icon

SDK を使用して新しいゲームレコードを変更する

これは、ゲームがゲームクライアントからゲームレコードデータを更新する必要がある場合に適しています。保存したデータは、以下の関数を使用して新しいデータに置き換えられます:

クライアント経由でゲームレコードを変更する

FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();

FString Key = "map-data";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=100;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=100,Y=225,Z=120"));

ApiClient->CloudSave.ReplaceGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceGameRecord fails
}));

サーバー経由でゲームレコードを変更する

FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();

FString Key = "map-data";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=100;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=100,Y=225,Z=120"));

ServerApiClient->ServerCloudSave.ReplaceGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceGameRecord fails
}));

サーバー経由でゲームレコードを一時的なものに変更する

FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();

FString Key = "map-data";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=100;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=100,Y=225,Z=120"));

FTTLConfig TTLConfig{};
TTLConfig.Action = EAccelByteTTLConfigAction::DELETE_RECORD;
TTLConfig.Expires_At = FDateTime::UtcNow() + FTimespan(0, 0, 5); // Will delete this record in the next five seconds

ServerApiClient->ServerCloudSave.ReplaceGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceGameRecord fails
})
, TTLConfig);

ゲームレコードデータを削除する

Admin Portal 経由で新しいゲームレコードを削除する

ゲームレコードを削除するには、以下の手順に従ってください:

  1. Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Game Records に移動します。

  2. Game Records ページで、レコードタイプに応じて、JSON または Binary タブを開きます。リストから、削除したいレコードを見つけて、Action メニューの下にある Delete ボタンをクリックします。

    The delete button

  3. 確認メッセージで Delete をクリックします。

    The delete confirmation message

SDK 経由で新しいゲームレコードを削除する

ゲームが SDK 側からゲームレコードを削除する必要がある場合は、以下の関数を使用して削除できます。

クライアント経由でゲームレコードを削除する

FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();

FString Key = FString("map-data");

ApiClient->CloudSave.DeleteGameRecord(Key
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteGameRecord fails
}));

サーバー経由でゲームレコードを削除する

FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();

FString Key = FString("map-data");

ServerApiClient->ServerCloudSave.DeleteGameRecord(Key
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteGameRecord fails
}));