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

パーティをゲームに統合する

Last updated on February 4, 2026

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

概要

AccelByte Gaming Services (AGS) セッションには、マルチプレイヤープレイのパーティを処理するサービスである AGS パーティが含まれています。プレイヤーは次のようなさまざまな方法でパーティと対話できます。

  • ユーザーパーティ情報: パーティ ID、リーダー ID、パーティメンバーのリストなど、パーティに関する情報をプレイヤーに表示します。
  • パーティを作成: プレイヤーが他のプレイヤーが参加できる新しいパーティを作成できるようにします。
  • パーティに招待: プレイヤーが友達をパーティに招待できるようにします。招待者と被招待者の両方が、招待が送信されたときに通知を受け取ります。
  • パーティに参加: プレイヤーが招待されたパーティに参加できるようにします。プレイヤーがパーティに参加すると、招待者と他のパーティメンバーに通知されます。
  • パーティ招待をキャンセル: プレイヤーがパーティ招待をキャンセルできるようにします。被招待者と招待者の両方が、招待がキャンセルされたという通知を受け取ります。被招待者は、キャンセル後に以前の招待に参加することはできません。
  • パーティ招待を拒否: プレイヤーがパーティ招待を拒否できるようにします。招待者は招待が拒否されたことを通知されます。
  • メンバーをパーティリーダーに昇格: プレイヤーが他のプレイヤーをパーティリーダーとして設定できるようにします。
  • パーティから追放: パーティリーダーが他のプレイヤーをパーティから削除(追放)できるようにします。
  • パーティから退出: プレイヤーがすでに参加しているパーティから退出できるようにします。プレイヤーがパーティから退出すると、他のパーティメンバーに通知されます。

この記事では、AGS パーティを使用したプレイヤーパーティの統合について説明します。

パーミッション

パーミッションは、AGS 内の特定のリソースへのアクセスを許可するために使用されます。パーティセッション V2 を管理する前に、アカウントに次のパーミッションがあることを確認してください。

用途パーミッションアクション
セッションテンプレートの追加、編集、削除ADMIN:NAMESPACE:*:SESSION:CONFIGURATIONCREATE, READ, UPDATE, DELETE
セッションとパーティでセッションを表示NAMESPACE:*:SESSION:GAMECREATE, READ, UPDATE, DELETE

前提条件

セッションインターフェース V2 を使用するには、次のファイルをインクルードします。

#include "OnlineSubsystem.h"
#include "OnlineSubsystemUtils.h"
#include "Interfaces/OnlineSessionInterface.h"
#include "Engine/World.h"
#include "Engine/GameEngine.h"

#include "OnlineSessionInterfaceV2AccelByte.h"
#include "OnlineSubsystemAccelByteSessionSettings.h"
#include "OnlineSubsystemSessionSettings.h"

次の関数を使用して、ゲームから FOnlineSessionV2AccelByteLocalPlayerId を取得します。

注記

チュートリアルの残りの部分では、インターフェースの各機能に焦点を当てるために、このコードスニペットは含まれません。

// ゲームから FOnlineSessionV2AccelByte を取得
const UWorld* World = GEngine->GetCurrentPlayWorld();
const IOnlineSubsystem* Subsystem = Online::GetSubsystem(World, ACCELBYTE_SUBSYSTEM);
const auto SessionInterface = StaticCastSharedPtr<FOnlineSessionV2AccelByte>(Subsystem->GetSessionInterface());

// ゲームから LocalPlayerId を取得
const int PlayerIndex = 0;
const ULocalPlayer* LocalPlayer = GEngine->GetLocalPlayerFromControllerId(GEngine->GetCurrentPlayWorld(), PlayerIndex );
const FUniqueNetIdPtr LocalPlayerId = LocalPlayer->GetPreferredUniqueNetId().GetUniqueNetId();

パーティを作成する

プレイヤーは、マッチメイキングに使用できるパーティを作成できます。プレイヤーは一度に1つのパーティのみを作成でき、作成したパーティのリーダーになります。

SessionInterface->AddOnCreateSessionCompleteDelegate_Handle(
FOnCreateSessionCompleteDelegate::CreateLambda([](const FName SessionName, const bool bWasSuccessful)
{
if (SessionName == NAME_PartySession)
{
if(!bWasSuccessful)
{
// パーティ作成エラー処理
}
// パーティ作成処理
}
}));

FOnlineSessionSettings NewSessionSettings;
NewSessionSettings.NumPrivateConnections = 4;

NewSessionSettings.Set(SETTING_SESSION_JOIN_TYPE, TEXT("INVITE_ONLY"));
NewSessionSettings.Set(SETTING_SESSION_TYPE, SETTING_SESSION_TYPE_PARTY_SESSION);
NewSessionSettings.Set(SETTING_SESSION_TEMPLATE_NAME, TEXT("TemplateNameFromAP"));

SessionInterface->CreateSession(LocalPlayerId.ToSharedRef().Get(), NAME_PartySession, NewSessionSettings);

パーティに招待する

プレイヤーは他のプレイヤーをパーティに招待できます。被招待者はパーティへの招待を受けたという通知を受け取り、現在のパーティメンバーも誰かがパーティに招待されたという通知を受け取ります。

// パーティ招待をリッスン
SessionInterface->AddOnV2SessionInviteReceivedDelegate_Handle(FOnV2SessionInviteReceivedDelegate::CreateLambda(
[](const FUniqueNetId& UserId, const FUniqueNetId&, const FOnlineSessionInviteAccelByte& InviteResult)
{
if (InviteResult.SessionType == EAccelByteV2SessionType::PartySession)
{
// パーティセッション招待通知を処理
// InviteResult にはパーティの詳細が含まれます
}
}));

// 他のユーザーに招待を送信
SessionInterface->SendSessionInviteToFriend(LocalPlayerId.ToSharedRef().Get(), NAME_PartySession, OtherUserPlayerId.ToSharedRef().Get());

送信中のパーティ招待をキャンセルする

プレイヤーは送信中の招待をキャンセルできます。被招待者と招待者は、招待がキャンセルされたという通知を受け取ります。被招待者は、キャンセル後に以前の招待を受け入れることはできません。

// 被招待者と招待者がセッション招待キャンセル通知をリッスン
auto OnSessionInviteCanceledDelegate = SessionInterface->AddOnSessionInviteCanceledDelegate_Handle(
FOnSessionInviteCanceledDelegate::CreateLambda([](const FString& SessionID) // キャンセルされたパーティの ID
{
// 招待キャンセルを受信
}));

// パーティリーダー(招待者)が招待をキャンセル
FName PartyName = NAME_PartySession;
auto OnCancelSessionInviteCompleteDelegate = SessionInterface->AddOnCancelSessionInviteCompleteDelegate_Handle(FOnCancelSessionInviteCompleteDelegate::CreateLambda(
[&](const FUniqueNetId& LocalUserId, FName SessionName, const FUniqueNetId& Invitee, const FOnlineError& ErrorInfo)
{
bool bInvitationCanceled = ErrorInfo.bSucceeded;
// セッション招待キャンセル完了
}));

SessionInterface->CancelSessionInvite(PlayerIndex, PartyName, *InviteeUniqueNetId);

パーティに参加する

パーティに招待されたプレイヤーは、招待を受け入れてパーティに参加できます。パーティ被招待者はパーティに参加したという通知を受け取り、現在のパーティメンバーも誰かがパーティに参加しているという通知を受け取ります。

// パーティ招待をリッスン
SessionInterface->AddOnV2SessionInviteReceivedDelegate_Handle(FOnV2SessionInviteReceivedDelegate::CreateLambda(
[](const FUniqueNetId& UserId, const FUniqueNetId&, const FOnlineSessionInviteAccelByte& InviteResult)
{
if (InviteResult.SessionType == EAccelByteV2SessionType::PartySession)
{
// パーティセッション招待通知を処理
// InviteResult にはパーティの詳細が含まれます
}
}));

// パーティセッションへの参加完了のデリゲートを追加
SessionInterface->AddOnJoinSessionCompleteDelegate_Handle(
FOnJoinSessionCompleteDelegate::CreateLambda([](FName SessionName, EOnJoinSessionCompleteResult::Type Result){
if (SessionName == NAME_PartySession)
{
// パーティセッションへの参加が完了、結果を確認
}
}));

// パーティセッションに参加
FOnlineSessionInviteAccelByte Invitation; // 通知からの招待
SessionInterface->JoinSession(*LocalPlayerId.Get(), NAME_PartySession, Invitation.Session);

パーティ招待を拒否する

プレイヤーがパーティに招待された場合、招待を拒否することができます。パーティ被招待者と現在のパーティメンバーは、招待を拒否したという通知を受け取ります。

FOnRejectSessionInviteComplete OnRejectSessionInviteComplete = FOnRejectSessionInviteComplete::CreateLambda([](const bool bWasSuccessful)
{
if (bWasSuccessful)
{
// パーティ招待の拒否に成功
}
});

// パーティセッションに参加
FOnlineSessionInviteAccelByte Invitation; // 通知からの招待
SessionInterface->RejectInvite(LocalPlayerId.ToSharedRef().Get(), Invitation, OnRejectSessionInviteComplete);

メンバーをパーティリーダーに昇格する

パーティリーダーは、他のパーティメンバーを新しいパーティリーダーに昇格させることができます。すべてのパーティメンバーに新しいパーティリーダーが通知されます。これは、パーティリーダーが他のパーティメンバーを新しいパーティリーダーに昇格させる方法です。新しいパーティリーダーは、パーティメンバーの特定のユーザー ID によって識別されます。

// パーティセッション更新をリッスン
SessionInterface->AddOnSessionUpdateReceivedDelegate_Handle(FOnSessionUpdateReceivedDelegate::CreateLambda([SessionInterface](FName SessionName)
{
if (SessionName == NAME_PartySession)
{
// パーティの更新通知があります
auto LatestPartySession = SessionInterface->GetNamedSession(NAME_PartySession);
}
}));

// 他のパーティメンバーをパーティリーダーに昇格
FOnPromotePartySessionLeaderComplete OnPromotePartySessionLeaderComplete =
FOnPromotePartySessionLeaderComplete::CreateLambda([](const FUniqueNetId& PromotedUserId, const FOnlineError& Result)
{
if (Result.bSucceeded)
{
// 新しいパーティリーダーの昇格に成功
}
});

SessionInterface->PromotePartySessionLeader(LocalPlayerId.ToSharedRef().Get(), NAME_PartySession, OtherUserPlayerId.ToSharedRef().Get(), OnPromotePartySessionLeaderComplete);

パーティからプレイヤーを追放する

パーティリーダーは、パーティメンバーをパーティから削除(追放)する権限を持っています。追放されたパーティメンバーはパーティから追放されたという通知を受け取り、現在のパーティメンバーも誰かがパーティから追放されたという通知を受け取ります。

// パーティセッションからプレイヤーを追放する通知をリッスン
SessionInterface->AddOnKickedFromSessionDelegate_Handle(FOnKickedFromSessionDelegate::CreateLambda([](FName SessionName)
{
if (SessionName == NAME_PartySession)
{
// プレイヤーがパーティから追放されました
}
}));

// パーティセッションからプレイヤーを追放
FOnKickPlayerComplete OnKickPlayerComplete =
FOnKickPlayerComplete::CreateLambda([](const bool bWasSuccessful, const FUniqueNetId& KickedPlayerId)
{
if (bWasSuccessful)
{
// プレイヤーがパーティから正常に追放されました
}
});

SessionInterface->KickPlayer(LocalPlayerId.ToSharedRef().Get(), NAME_PartySession, PlayerIdToKick.ToSharedRef().Get());

パーティから退出する

パーティメンバーは、パーティから退出することを選択できます。パーティリーダーがパーティから退出すると、パーティのリーダーシップは自動的に別のパーティメンバーに渡されます。パーティから退出したパーティメンバーはパーティから退出したという通知を受け取り、現在のパーティメンバーも誰かがパーティから退出しているという通知を受け取ります。

// パーティセッション更新をリッスン
SessionInterface->AddOnSessionUpdateReceivedDelegate_Handle(FOnSessionUpdateReceivedDelegate::CreateLambda([SessionInterface](FName SessionName)
{
if (SessionName == NAME_PartySession)
{
// パーティの更新通知があります
auto LatestPartySession = SessionInterface->GetNamedSession(NAME_PartySession);
}
}));

// パーティから退出
PartySession = SessionInterface->GetNamedSession(NAME_PartySession);
auto PartySessionInfo = StaticCastSharedPtr<FOnlineSessionInfoAccelByteV2>(PartySession->SessionInfo);
FString PartyId = PartySessionInfo->GetBackendSessionDataAsPartySession()->ID;

FOnLeaveSessionComplete OnLeavePartyComplete =
FOnLeaveSessionComplete::CreateLambda([](const bool bWasSuccessful, FString SessionId)
{
if (bWasSuccessful)
{
// パーティの退出に成功
}
});
SessionInterface->LeaveSession(LocalPlayerId.ToSharedRef().Get(), EAccelByteV2SessionType::PartySession, PartyId, OnLeavePartyComplete);

パーティコード

パーティリーダーは、プレイヤーがパーティに参加できるように、プレイヤーにパーティコードを送信できます。パーティコードを更新または取り消すことができるのは、パーティリーダーのみです。

パーティコードを取得する

コードが生成されると、パーティリーダーはコードを取得して他のプレイヤーと共有できます。この関数により、パーティリーダーはパーティコードを取得できます。

FString Code;
auto PartySession = SessionInterface->GetNamedSession(NAME_PartySession);
auto PartySessionInfo = StaticCastSharedPtr<FOnlineSessionInfoAccelByteV2>(PartySession->SessionInfo);
FString PartyCode = PartySessionInfo->GetBackendSessionDataAsPartySession()->Code;

PartySession->SessionSettings.Get(SETTING_PARTYSESSION_CODE, PartyCode);

パーティコードを生成または更新する

次の関数を使用して、パーティコードを生成または更新します。

const FOnGenerateNewPartyCodeComplete OnGenerateNewPartyCodeCompleteDelegate =
FOnGenerateNewPartyCodeComplete::CreateLambda([](const bool bWasSuccessful, FString NewPartyCode)
{
if (bWasSuccessful)
{
// 新しいパーティコードの生成に成功
}
});

パーティコードを取り消す

パーティリーダーはパーティコードを取り消すことができます。パーティコードが取り消されると、プレイヤーはそれを使用してパーティに参加できなくなります。この関数により、パーティリーダーはパーティコードを取り消すことができます。

const FOnRevokePartyCodeComplete OnRevokePartyCodeComplete =
FOnRevokePartyCodeComplete::CreateLambda([](const bool bWasSuccessful)
{
if (bWasSuccessful)
{
// パーティコードの取り消しに成功
}
});

SessionInterface->RevokePartyCode(LocalPlayerId.ToSharedRef().Get(), NAME_PartySession, OnRevokePartyCodeComplete);

パーティコードでパーティに参加する

パーティコードを送信されたプレイヤーは、それを使用してパーティに参加できます。この関数により、プレイヤーはパーティコードを使用してパーティに参加できます。

// パーティセッションへの参加完了のデリゲートを追加
SessionInterface->AddOnJoinSessionCompleteDelegate_Handle(
FOnJoinSessionCompleteDelegate::CreateLambda([](FName SessionName, EOnJoinSessionCompleteResult::Type Result){
if (SessionName == NAME_PartySession)
{
// パーティセッションへの参加が完了、結果を確認
}
}));

// パーティリーダーからのパーティコード
FString PartyCode = TEXT("PARTY_CODE");
SessionInterface->JoinSession(LocalPlayerId.ToSharedRef().Get(), NAME_PartySession, PartyCode);

パーティセッションを更新する

ゲームセッションは、Refresh Session メソッドを使用してバックエンドと同期するために更新できます。提供される SessionName パラメーターは、NAME_PartySession に対応する場合があります。

SessionInterface->RefreshSession(SessionName, FOnRefreshSessionComplete::CreateLambda([]()
{
// セッション更新完了時
}));

アクティブセッションを更新する

問題を防ぎ、バックエンドとの適切な同期を確保するには、次の関数を使用して、クライアントにローカルにキャッシュされているすべてのアクティブセッションを更新します。

SessionInterface->RefreshActiveSessions(FOnRefreshActiveSessionsComplete::CreateLambda(
[&](bool bWasSuccessful)
{
// アクティブセッション更新完了時
}));