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

Storing in-game configurations in game records

Last updated on December 18, 2023

概要

クラウドセーブサービスでは、ゲームデータを、ゲームのユースケースに合わせて、JSON 形式で保存できます。保存されたゲームレコードはグローバルタイトルでの使用に向けたものであり、プレイヤーによるアクセスが可能で、場合によっては編集も可能です。たとえば、次のようなデータを保存します。

  • ゲームの季節的な UI テーマ設定
  • ゲームのイベントやニュースの情報
  • プレイヤー全体のゲームデータ(例:クランのエリアやマップ)など

このガイドでは、ゲームレコードを活用してゲームデータを保存し、それをゲームクライアント内で表示し、ゲームのユースケースに従って変更する方法を説明します。

目標

  • ゲームレコードについての説明と概要を提供する。
  • ゲームレコードにゲームデータを保存する方法を説明する。
  • ゲームレコードを表示する方法を説明する。
  • ゲームレコードを変更する方法を説明する。
  • ゲームレコードを削除する方法を説明する。
  • AccelByte SDK を使用してゲームレコードを活用する方法を説明する。

前提条件

以下へのアクセスが必要になります。

  • 管理者ポータル
  • AccelByte UnrealまたはUnity SDK (次の権限を含む)
    • クライアント ID
    • クライアントの秘密
  • AccelByte クラウドセーブ API ドキュメント

新しいゲームレコードへのデータの保存

管理者ポータルを介した新しいゲームレコードへのデータの保存

管理者ポータルを介したゲームレコードの作成は、ゲームクライアントが変更する必要がなく、ゲームクライアントにしか取得できないデータを保存したい場合に適しています。たとえば、季節的な UI テーマ設定、イベントやニュースの情報などです。

ゲームレコードを作成するには、以下の手順に従います。

  1. 管理者ポータルの[Game Management (ゲーム管理)]セクションで、[Cloud Save (クラウドセーブ)]メニューに移動し、[Game Records (ゲームレコード)]を選択します。

  2. Cloud Save (クラウドセーブ)]ページで、[Create Game Record (ゲームレコードを作成)]ボタンをクリックします。

  3. Add Record (レコードを追加)]フォームが表示されます。必須フィールドに入力してください。

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

SDK を使用した新しいゲームレコードへのデータの保存

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

クライアントを介したゲームレコードの作成

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"));


FMultiRegistry::GetApiClient()->CloudSave.SaveGameRecord(Key, *RecordRequest, FVoidHandler::CreateLambda([]()

{

// Do something if SaveGameRecord has been successful

}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)

{

// Do something if SaveGameRecord has an error

UE_LOG(LogTemp, Log, TEXT("Error SaveGameRecord, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);

}));

サーバーを介したゲームレコードの作成

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"));



FMultiRegistry::GetServerApiClient()->ServerCloudSave.SaveGameRecord(Key, *RecordRequest, FVoidHandler::CreateLambda([]()

{

// Do something if SaveGameRecord has been successful

}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)

{

// Do something if SaveGameRecord has an error

UE_LOG(LogTemp, Log, TEXT("Error SaveGameRecord, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);

}));

ゲームレコードのデータの表示

作成元および保存元が管理者ポータルの場合でもゲームクライアントの場合でも、ゲームレコードはすべてのプレイヤーが取得できます。このデータを活用すると、ゲームのユースケースをサポートするためのあらゆることができます。たとえば、データを使用して季節的なテーマのUIを置き換えたり、データを表示してニュースやイベントの更新を見せたりできます。

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

クライアントを介したゲームレコードの取得

FString Key = FString("inGameNews");



FMultiRegistry::GetApiClient()->CloudSave.GetGameRecord(Key, THandler<FAccelByteModelsGameRecord>::CreateLambda([](const FAccelByteModelsGameRecord& Result)

{

// Do something if GetGameRecord has been successful

}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)

{

// Do something if GetGameRecord has an error

UE_LOG(LogTemp, Log, TEXT("Error GetGameRecord, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);

}));

サーバーを介したゲームレコードの取得

FString Key = FString("inGameNews");



FMultiRegistry::GetServerApiClient()->ServerCloudSave.GetGameRecord(Key, THandler<FAccelByteModelsGameRecord>::CreateLambda([](const FAccelByteModelsGameRecord& Result)

{

// Do something if GetGameRecord has been successful

}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)

{

// Do something if GetGameRecord has an error

UE_LOG(LogTemp, Log, TEXT("Error GetGameRecord, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);

}));

ゲームレコードのデータの変更

管理者ポータルを介したゲームレコードの変更

管理者ポータルからのゲームレコードの変更は、手動で データを調整したい場合に適しています。たとえば、データの修正や、監査などです。 ゲームレコードを更新するには、以下の手順に従います。

  1. 管理者ポータルの[Game Management (ゲーム管理)]セクションで、[Cloud Save (クラウドセーブ)]メニューに移動し、[Game Records (ゲームレコード)]を選択します。

  2. Cloud Save (クラウドセーブ)]ページで、更新したいレコードを選択し、[Action (アクション)]メニューで[View (表示)]を選択します。

  3. Record Detail (レコードの詳細)]で、[JSON Configuration (JSON 設定)]セクションに移動し、[Edit (編集)]をクリックします。

  4. 更新された情報を入力し、[Save (保存)]をクリックして完了します。

SDK を使用した新しいゲームレコードの変更

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

クライアントを介したゲームレコードの変更

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"));


FMultiRegistry::GetApiClient()->CloudSave.ReplaceGameRecord(Key, *RecordRequest, FVoidHandler::CreateLambda([]()

{

// Do something if ReplaceGameRecord been successful

})

, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)

{

// Do something if ReplaceGameRecord has an error

}));

サーバーを介したゲームレコードの変更

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"));


FMultiRegistry::GetServerApiClient()->ServerCloudSave.ReplaceGameRecord(Key, *RecordRequest, FVoidHandler::CreateLambda([]()

{

// Do something if ReplaceGameRecord been successful

})

, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)

{

// Do something if ReplaceGameRecord has an error

}));

ゲームレコードのデータの削除

管理者ポータルを介した新しいゲームレコードの削除

ゲームレコードを削除するには、次の手順に従います。

  1. 管理者ポータルの[Game Management (ゲーム管理)]セクションで、[Cloud Save (クラウドセーブ)]メニューに移動し、[Game Records (ゲームレコード)]を選択します。

  2. Cloud Save (クラウドセーブ)]ページで、リストから削除したいレコードを選択し、[Action (アクション)]メニューの[Delete (削除)]ボタンをクリックします。

  3. Delete Game Record (ゲームレコードを削除)]確認モーダルが表示されます。続行するには[Delete (削除)]をクリックします。

SDK を介した新しいゲームレコードの削除

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

クライアントを介したゲームレコードの削除

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



FMultiRegistry::GetApiClient()->CloudSave.DeleteGameRecord(Key, FVoidHandler::CreateLambda([]()

{

// Do something if DeleteGameRecord has been successful

}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)

{

// Do something if DeleteGameRecord has an error

UE_LOG(LogTemp, Log, TEXT("Error DeleteGameRecord, Error Code: %d Error Message: %s"), ErrorMessage, *ErrorMessage);

}));

サーバーを介したゲームレコードの削除

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



FMultiRegistry::GetServerApiClient()->ServerCloudSave.DeleteGameRecord(Key, FVoidHandler::CreateLambda([]()

{

// Do something if DeleteGameRecord has been successful

}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)

{

// Do something if DeleteGameRecord has an error

UE_LOG(LogTemp, Log, TEXT("Error DeleteGameRecord, Error Code: %d Error Message: %s"), ErrorMessage, *ErrorMessage);

}));