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

Storing Player Attributes in Public Records

Last updated on November 23, 2023

概要

クラウドセーブサービスでは、プレイヤーのデータを公開保存できます。公開保存とは、特定のプレイヤーのデータを他のプレイヤーから読み取れるようにするということです。JSON 形式で保存したすべてのデータを取得、変更、削除できます。

保存されているデータは通常は機密性の低いデータであり、他のプレイヤーに公開されても問題はありません。また、このデータに関するプライバシー規則はありません。たとえば、次のようなデータを保存します。

  • プレイヤーのプロファイルデータ (プレイヤーのステータス、プレイヤー情報、ジョブ、ロール、ティア、レベルなど)
  • プレイヤーがカスタマイズした武器装備など

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

目標

このセクションの目標は次のとおりです。

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

前提条件

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

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

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

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

クラウドセーブの公開プレイヤーレコードを保存する方法は 2 つあり、ゲームのユースケースに基づいて選択できます。

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

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

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

この保存方法は、たとえば、プレイヤーの武器装備といったプレイヤー情報などのデータを保存するのに適しています。

次の例では、ゲームクライアントを介して、playerInformation キー内にユーザーデータを保存する方法を示しています。

注意:キーが既に存在する場合、新しいデータは既存のレコードに追加されます。

Unreal Engine
FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "playerInformation";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("FirstName", "John");

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

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

この保存方法は、プレイヤーのランクやティアなど、特定のゲームロジックにより更新されるものの、プレイヤーに手動でトリガーされることのないデータの保存に適しています。

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

Unreal Engine
FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();

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

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("Rank", "Legend");

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


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

ゲームのユースケースに基づいて、保存したレコードを取得して表示できます。プレイヤーレコードを表示する一般的なアプローチは 2 つあり、いずれもレコードの所有者に基づいています。

  • 自分の公開プレイヤーレコード(自分のプレイヤー情報ページなど)
  • 他のユーザーの公開プレイヤーレコード(他のユーザーのプレイヤー情報ページなど)

自分の公開プレイヤーレコードの表示

次の例は、playerInfo キー内のユーザーデータを取得する方法を示しています。

Unreal Engine
FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "playerInfo";

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


他のユーザーが所有する公開プレイヤーレコードの表示

公開ユーザーレコードは、他のユーザーも取得できます。次の例は、playerInfo キー内にある、他のユーザーが所有するプレイヤーレコードのデータの取得方法を示しています。

Unreal Engine
FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

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

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


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

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

1.ゲームクライアントを介して変更します。これは、プレイヤーが自分のプレイヤーレコードを変更できるようにする場合に適しています。たとえば、ユーザーがプレイヤー情報を更新する場合などです。

2.ゲームサーバーを介して変更します。これは、ゲームサーバーしかプレイヤーレコードを変更できないようにする場合に適しています。たとえば、ゲームサーバーがプレイヤーに新しいランクやティアを割り当てる場合などです。

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

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

  1. 置換:データ全体を新しい内容に置き換えたい場合に適しています。レコードが存在しない場合は、その新しいデータに基づいて作成されます。レコードが既に存在する場合は、そのすべてを置き換えます。

  2. 追加:プレイヤーレコードに新しいキーと値のみを追加したい場合に適しています。置換に比べて軽いプロセスで実行できます。

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

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

Unreal Engine
FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "playerInfo";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("FirstName", "Doe");

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


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

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

Unreal Engine
FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "playerInfo";

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("LastName", "Doe");

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


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

ゲームサーバーは、公開プレイヤーレコードのデータを変更するための権限を、最も多く有しています。レコードの書き込み権限の詳細については、こちらのセクション を確認してください。

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

Unreal Engine
FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();

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

TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField("Rank", "Diamond");

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


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

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

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

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

Unreal Engine
FApiClientPtr ApiClient = FMultiRegistry::GetApiClient();

FString Key = "playerInfo";

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


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

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

Unreal Engine
FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();

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

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