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

Storing Player Attributes in Private Records

Last updated on September 20, 2023

概要

クラウドセーブサービスでは、プレイヤーのデータを非公開保存できます。 非公開保存とは、プレイヤーが他のプレイヤーの特定のデータを読み取れないことを意味します。

保存されるデータは、通常、他のプレイヤーには関係のない情報、または機密情報の場合があり、JSON 形式で保存されます。たとえば、次のようなデータの保存が考えられます。

  • プレイヤーの個人設定 (キーバインド、グラフィック品質、オーディオ設定など)

  • 特定のユースケースに対するプレイヤー固有の情報 (RPG タイトルにおけるキャラクターの最終位置など)

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

目標

  • 非公開プレイヤーレコードについての説明と概要を示す。
  • 非公開プレイヤーレコードに非公開プレイヤーデータを保存する方法を説明する。
  • 非公開プレイヤーレコードを表示する方法を説明する。
  • 非公開プレイヤーレコードを変更する方法を説明する。
  • 非公開プレイヤーレコードを削除する方法を説明する。
  • AccelByte SDK を使用して公開プレイヤーレコードを活用する方法を説明する。

前提条件

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

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

非公開プレイヤーレコードへのユーザーデータの保存

ゲームではユーザーデータを保存することが重要です。なぜなら、データを保存することで、 プレイヤーはプレイするたびに最初から始める必要がなくなり、ゲーム体験をより楽しいものにできるからです。

クラウドセーブの非公開プレイヤーレコードを保存するには、2 つの方法があります。

  • ゲームクライアントを介して保存する。保存されたデータは、ゲームクライアントとゲームサーバーの両方から変更できる。
  • ゲームサーバーを介して保存する。ゲームサーバーを介して保存されたデータは、ゲームサーバーからしか変更できない。

上記 2 つの手法における唯一の違いは、レコードに割り当てることができる書き込み権限です。レコードの書き込み権限の詳細については、こちらのセクション を確認してください。

ゲームクライアントを介した非公開プレイヤーレコードへのユーザーデータの保存

この方法は、他のプレイヤーに関係しないプレイヤーデータを保存する場合かつ、 レコード所有者がデータを変更できる場合に適しています。たとえば、プレイヤーのグラフィック品質設定、キーバインドなどの 保存が挙げられます。

次の例では、ゲームクライアントを介して graphicQuality キー内にユーザーデータを 保存する方法を示しています。キーが既に存在する場合、 新しいレコードは既存のレコードに追加されることに注意してください。


FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "graphicQuality";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
// 0 Low Quality, 1 Medium Quality, 2 High Quality
RecordRequest->SetNumberField(FString("textures"), 2);
RecordRequest->SetNumberField(FString("shadow"), 1);
RecordRequest->SetNumberField(FString("lighting"), 0);
RecordRequest->SetNumberField(FString("post-processing"), 2);

ApiClient->CloudSave.SaveUserRecord(Key
, *RecordRequest
, false
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if SaveUserRecord has an error
}));

ゲームサーバーを介した非公開プレイヤーレコードへのユーザーデータの保存

この方法は、他のプレイヤーに関係しないプレイヤーデータを保存する場合かつ、 レコード所有者がデータを変更できない場合に適しています。たとえば、プレイヤーがゲームを終了する前のキャラクターの 最終位置を保存する場合などです。これにより、プレイヤーがゲームを起動するときに 最終位置が読み込まれます。

次の例は、ゲームサーバーを介して characterLocation キー内にユーザーデータを保存する方法を示しています。


FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();

FString Key = "characterLocation";
FString UserId = "Player User Id";
ESetByMetadataRecord SetBy = ESetByMetadataRecord::SERVER;

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("LastLocation", "x:120,y:200");

ApiServer->ServerCloudSave.SaveUserRecord(Key
, UserId
, SetBy
, false
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if SaveUserRecord has an error
}));

非公開プレイヤーレコードのデータの表示

保存されている非公開プレイヤーレコードは、レコード所有者しか取得できません。 データを取得した後は、ゲームのユースケースをサポートするためのあらゆることができます。 例として、グラフィック品質設定のインポートや、キーバインド設定のインポートなどができます。


FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "graphicQuality";

ApiClient->CloudSave.GetUserRecord(Key
, THandler<FAccelByteModelsUserRecord>::CreateLambda([](FAccelByteModelsUserRecord Result)
{
// Do something if GetUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if GetUserRecord has an error
}));

非公開プレイヤーレコードのデータの変更

プレイヤーレコードのデータは、ゲームのユースケースに基づいて変更できます。 クラウドセーブの非公開プレイヤーレコードを変更するには、2 つの手法があります。

1.ゲームクライアントを介した変更 1.ゲームサーバーを介した変更

ゲームクライアントを介した非公開プレイヤーレコードの変更

これは、プレイヤーが自分のプレイヤーレコードを変更できるようにする場合に適しています。 たとえば、ユーザーがグラフィック設定を更新する場合などです。

非公開プレイヤーレコードを変更するには、2 つの手法があります

  1. 置換:データ全体を新しい内容に置き換えたい場合に適しています。レコードが存在しない場合は、その新しいデータに基づいて作成されます。レコードが既に存在する場合は、レコード全体を置き換えます。
  2. 追加:プレイヤーレコードに新しいキーと値のみを追加したい場合に適しています。置換に比べて軽いプロセスで実行できます。

ユーザーの非公開プレイヤーレコードの置換

次の例は、graphicQuality キー内のユーザーデータを置き換える方法を示しています。


FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "graphicQuality";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
// 0 Low Quality, 1 Medium Quality, 2 High Quality
RecordRequest->SetNumberField(FString("textures"), 2);
RecordRequest->SetNumberField(FString("shadow"), 2);
RecordRequest->SetNumberField(FString("lighting"), 2);
RecordRequest->SetNumberField(FString("post-processing"), 2);

ApiClient->CloudSave.ReplaceUserRecord(Key
, false
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceUserRecord has an error
}));

ユーザーの非公開プレイヤーレコードの追加

次の例は、graphicQuality キー内にユーザーデータを追加する方法を示しています。


FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "graphicQuality";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("blur", "2");

ApiClient->CloudSave.SaveUserRecord(Key
, *RecordRequest
, false
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if SaveUserRecord has an error
}));

ゲームサーバーを介した非公開プレイヤーレコードの変更

ゲームサーバーは、非公開プレイヤーレコードのデータを変更するための権限を、最も多く有しています。レコードの書き込み権限の詳細については、 こちらのセクション を確認してください。 これは、ゲームサーバーしかプレイヤーレコードを変更できないようにする場合に適しています。たとえば、ゲームサーバーでキャラクターの最終位置を保存する場合などです。

次の例では、ゲームサーバーを介して characterLocation キー内にあるプレイヤーレコードのデータを変更する方法を示しています。


FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();

FString Key = "characterLocation";
FString UserId = "Player User Id";
ESetByMetadataRecord SetBy = ESetByMetadataRecord::SERVER;

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("LastLocation", "x:2330,y:8710");

ApiServer->ServerCloudSave.ReplaceUserRecord(Key
, SetBy
, false
, UserId
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceUserRecord has an error
}));

特定のユーザーが所有する非公開プレイヤーレコードの削除

非公開プレイヤーレコードのデータは削除することもできます。プレイヤーレコードのデータの削除は、ゲームクライアントまたはゲームサーバーから行えます。

ゲームクライアントを介したユーザーの非公開プレイヤーレコードの削除

次の例は、ゲームクライアントを介して graphicQuality キーでユーザーレコードデータを削除する方法を示しています。


FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "graphicQuality";

ApiClient->CloudSave.DeleteUserRecord(Key
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if DeleteUserRecord has an error
}));

ゲームサーバーを介したユーザーの非公開プレイヤーレコードの削除

次の例では、ゲームサーバーを介して、characterLocation キーでユーザーレコードのデータを削除する方法を示しています。


FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();

FString Key = "characterLocation";
FString UserId = "Player User Id";

ApiServer->ServerCloudSave.DeleteUserRecord(Key
, UserId
, false
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteUserRecord been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if DeleteUserRecord has an error
}));