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

プレイヤーブロックを実装する

Last updated on February 4, 2026

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

概要

AccelByte Gaming Services (AGS) フレンドサービスを使用すると、プレイヤーがゲーム内で他のプレイヤーとのインタラクションを管理できるようになります。これには、プレイヤーが他のプレイヤーとのインタラクションをブロックする機能が含まれます。

この記事では、プレイヤーブロックの概要を説明し、ゲームにプレイヤーブロックを実装する方法を説明します。

プレイヤーブロックの機能

ブロックにより、プレイヤーは他のプレイヤーとのインタラクションを制限できます。あるプレイヤーが別のプレイヤーをブロックすると、両方のプレイヤーは次のことができなくなります。

  • お互いをフレンドとして追加する。プレイヤーがすでにフレンドの場合、フレンド関係が解除されます。
  • お互いをパーティーセッションに招待する。注意: AGS Sessionバージョン3.13.11以降が必要です。
  • マッチで互いに会う。注意: AGS Matchmakingバージョン2.15.3以降が必要です。
  • 自動的に同じパーティーに配置される。注意: 別のプレイヤーが両方を招待した場合は、同じパーティーにいることができます。
  • お互いをグループに招待する。
  • グループメンバーリストで互いのプレイヤープロフィールを見る。
  • マッチメイキングを通じて一緒にマッチングされる。注意: これはマッチメイキングルールセットで調整できます。

ロビーブロックは、チャットサービスのブロック動作で使用されるように設定することもできます。設定すると、チャットサービスは独自のブロック機能の代わりにロビーブロックデータを使用します。ブロック機能(ユーザーインタラクション)は、パーソナルチャットとセッションチャットに適用され、次のことを制限します。

  • パーソナルチャット: ブロックされたユーザーにメッセージを送信できず、その逆も同様です。
  • セッションチャット: ブロックされたプレイヤーは1つのセッションに参加できません。ただし、ユーザーが同じパーティーにいる間に別のユーザーをブロックした場合、影響を受けるユーザーはメッセージを送信できますが、互いのメッセージを見ることはできません。
備考

ロビーブロックをチャットサービスで使用するように設定するには、カスタマーポータルまたはDiscordコミュニティを通じてAccelByteチームにお問い合わせください。

プレイヤーブロックを実装する

AGS Game SDKを使用すると、プレイヤーブロック機能はWebSocketまたはHTTP RESTエンドポイント経由で利用できます。この記事では、両方の方法を使用したサンプル実装を提供します。

プレイヤーをブロックする

次のコードを使用してプレイヤーをブロックします。

FOnlineSubsystemAccelByte* OnlineSubsystem = static_cast<FOnlineSubsystemAccelByte*>(Online::GetSubsystem(GetWorld()));
FOnlineIdentityAccelBytePtr IdentityInterface = StaticCastSharedPtr<FOnlineIdentityAccelByte>(OnlineSubsystem->GetIdentityInterface());
FOnlineFriendsAccelBytePtr FriendsInterface = StaticCastSharedPtr<FOnlineFriendsAccelByte>(OnlineSubsystem->GetFriendsInterface());

const int32 BlockerLocalUserNum = 0;
const FUniqueNetIdPtr BlockerUserId = IdentityInterface->GetUniquePlayerId(BlockerLocalUserNum);
const FUniqueNetIdPtr BlockedUserId;

auto OnBlockedPlayerCompleteDelegate = FriendsInterface->AddOnBlockedPlayerCompleteDelegate_Handle(BlockerLocalUserNum, FOnBlockedPlayerCompleteDelegate::CreateLambda([BlockerLocalUserNum](int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UniqueID, const FString& ListName, const FString& ErrorStr)
{
if (LocalUserNum == BlockerLocalUserNum && bWasSuccessful)
{
// Do something
}
}));

FriendsInterface->BlockPlayer(BlockerLocalUserNum, *BlockedUserId);

プレイヤーブロックイベントをリッスンする

ゲームは、ブロックされたプレイヤー同士をマッチングさせないようにするなどのタスクを回避するために、プレイヤーが他のプレイヤーによってブロックされたかどうかを知る必要があります。ブロックイベントは、以下に示すようにイベントをサブスクライブすることで追跡できます。イベントはブロックされたプレイヤー側で発生し、ブロックしたプレイヤーとブロックされたプレイヤーの両方のユーザーIDを含むデータを渡します。

const int32 LocalUserNum = 0;
FApiClientPtr ApiClient = IdentityInterface->GetApiClient(LocalUserNum);

ApiClient->Lobby.SetBlockPlayerNotifDelegate(AccelByte::Api::Lobby::FBlockPlayerNotif::CreateLambda([](const FAccelByteModelsBlockPlayerNotif & Result) {
// Do something if BlockPlayerNotifDelegate succeeds
}));

プレイヤーのブロックを解除する

次のコードを使用してプレイヤーのブロックを解除します。

const int32 UnblockerLocalUserNum = 0;
const FUniqueNetIdPtr UnblockerUserId = IdentityInterface->GetUniquePlayerId(UnblockerLocalUserNum);
const FUniqueNetIdPtr UnblockedUserId;

auto OnUnblockedPlayerCompleteDelegate = FriendsInterface->AddOnUnblockedPlayerCompleteDelegate_Handle(UnblockerLocalUserNum, FOnBlockedPlayerCompleteDelegate::CreateLambda([UnblockerLocalUserNum](int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UniqueID, const FString& ListName, const FString& ErrorStr)
{
if (LocalUserNum == UnblockerLocalUserNum && bWasSuccessful)
{
// Do something
}
}));

FriendsInterface->UnblockPlayer(UnblockerLocalUserNum, *UnblockedUserId);

プレイヤーブロック解除イベントをリッスンする

このイベントは、ブロック解除されたプレイヤー側で発生し、アクター(ブロックを解除したプレイヤー)とターゲット(ブロック解除されたプレイヤー)の両方のユーザーIDを含むデータを渡します。

const int32 LocalUserNum = 0;
FApiClientPtr ApiClient = IdentityInterface->GetApiClient(LocalUserNum);

ApiClient->Lobby.SetUnblockPlayerNotifDelegate(AccelByte::Api::Lobby::FUnblockPlayerNotif::CreateLambda([](const FAccelByteModelsUnblockPlayerNotif & Result) {
// Do something if UnblockPlayerNotifDelegate succeeds
}));

ブロックされたプレイヤーのリストを取得する

次のコードを使用して、現在のユーザー(呼び出し元)のブロックされたプレイヤーのリストを取得します。これには、ブロックされた各プレイヤーのユーザーIDを含むデータの配列を返すコールバックがあります。

const int32 UnblockerLocalUserNum = 0;
const FUniqueNetIdPtr BlockerUserId = IdentityInterface->GetUniquePlayerId(BlockerLocalUserNum);

auto OnQueryBlockedPlayersCompleteDelegate = FriendsInterface->AddOnQueryBlockedPlayersCompleteDelegate_Handle(FOnQueryBlockedPlayersCompleteDelegate::CreateLambda([](const FUniqueNetId& UserId, bool bWasSuccessful, const FString& Error)
{
// Do something
}));
FriendsInterface->QueryBlockedPlayers(*BlockerUserId);

TArray<TSharedRef<FOnlineBlockedPlayer>> BlockedPlayers;
FriendsInterface->GetBlockedPlayers(*BlockerUserId, BlockedPlayers);

ブロッカーのリストを取得する

次のコードを使用して、プレイヤーをブロックしたプレイヤーのリストを取得します。これには、ブロックされたプレイヤーのユーザーIDを含むデータの配列を返すコールバックがあります。

const int32 LocalUserNum = 0;
FApiClientPtr ApiClient = IdentityInterface->GetApiClient(LocalUserNum);

ApiClient->Lobby.GetListOfBlockers(THandler < FAccelByteModelsListBlockerResponse > ::CreateLambda([](const FAccelByteModelsListBlockerResponse & Result) {
// Do something if GetListOfBlockers succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
// Do something if GetListOfBlockers fails
UE_LOG(LogTemp, Log, TEXT("Error GetListOfBlockers, Error Code: %d Error Message: %s"), ErrorCode, * ErrorMessage);
}));

マッチメイキング動作を設定する

注記

この機能には、AGS Matchmakingバージョン2.15.3以降が必要です。

デフォルトでは、AGS Matchmakingは、互いにブロックしているプレイヤーをマッチングすることはありません。ただし、マッチルールセットを使用して、マッチメイキング動作を制御できます。以下にサンプルルールセットがあります。

ruleset
{
"alliance": {
"min_number": 2,
"max_number": 2,
"player_min_number": 5,
"player_max_number": 5
},
"blocked_player_option": "blockedPlayerCannotMatch" // デフォルト値
}

blocked_player_optionを使用して、ブロックされたプレイヤーのマッチメイキング動作を制御できます。

  • blockedPlayerCannotMatch: デフォルトのマッチメイキング動作。ブロックされたプレイヤーは、同じゲームまたはセッションにマッチングできません。
  • blockedPlayerCanMatchOnDifferentTeam: この値を使用すると、ブロックされたプレイヤーは互いにマッチングして異なるチームに配置されることができます。
  • blockedPlayerCanMatch: この値を使用すると、ブロックされたプレイヤーは通常どおり互いにマッチングできます。

ネイティブプラットフォームとブロックリストデータを同期する

注記

この機能には、AGS Lobbyバージョン3.35.1以降が必要です。

AGSは、ネイティブプラットフォーム(現在はPlayStation Networkでのみ利用可能)とのブロックされたプレイヤーの同期をサポートしています。このプロセスは、ネイティブプラットフォームからのブロックリストデータをAGSデータベースに自動的に追加します。一般的な使用例は、ゲームクライアントがログイン後にネイティブプラットフォームとブロックリストデータを同期できるようにすることです。

パラメータ名タイプ説明
PlatformIdFStringフレンドリストを同期するプラットフォームのID。有効な値は:steam, ps5, ps4です。
PsnEnvFStringフレンドを同期する選択されたPlayStation (PSN) 環境。有効な値は:sp-int, prod-qa, npです。

次のコードを使用して、ブロックされたプレイヤーの同期を実装します。

const int32 LocalUserNum = 0;

auto OnSyncThirdPartyBlockListCompleteDelegate = FriendsInterface->AddOnSyncThirdPartyBlockListCompleteDelegate_Handle(LocalUserNum, FOnSyncThirdPartyBlockListCompleteDelegate::CreateLambda([](int32 InLocalUserNum, const FOnlineError& ErrorInfo, const TArray<FAccelByteModelsSyncThirdPartyBlockListResponse>& Response)
{
// Do something
}));

FAccelByteModelsSyncThirdPartyBlockListInfo PlatformInfo;
PlatformInfo.PlatformId = FAccelByteUtilities::GetPlatformString(EAccelBytePlatformType::PS4);
PlatformInfo.PsnEnv = "np";

FAccelByteModelsSyncThirdPartyBlockListRequest BlockSyncRequest;
BlockSyncRequest.BlockListSyncDetails.Add(PlatformInfo);

FriendsInterface->SyncThirdPartyPlatformBlockList(LocalUserNum, BlockSyncRequest);

エンドポイントリファレンス

PSNブロックされたプレイヤーを同期https://docs.accelbyte.io/api-explorer/lobby