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

ゲームセッションの属性を統合する

Last updated on February 4, 2026

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

概要

AccelByte Gaming Services(AGS)セッションを使用したゲームセッションには、ゲームセッションをホストするために使用されるメンバーと専用サーバー(DS)間で共有されるデータの保存と読み取りに使用できるセッション属性を含めることができます。すべてのゲームセッションメンバーとDSは、このデータへの読み取りおよび書き込みアクセス権を持っています。

この記事では、AGS Game SDKを通じてセッションデータの更新の保存、読み取り、通知のリスニング方法を示します。次のトピックに関するコードスニペットも提供されています。

  • セッション属性の保存
  • 更新の競合の処理
  • セッション属性の読み取り
  • セッションデータ更新の通知のリスニング

セッション属性を保存する

セッションデータの保存には、開発者がセッションを属性で更新する必要があります。属性は、ゲームセッションの作成時にも入力できます。

Unreal OSSのセッション属性はセッション設定内に保存されるため、セッション設定でセッション属性を設定してからUpdateSessionを呼び出す必要があります。

FOnlineSubsystemAccelByte* AccelByteOSS = static_cast<FOnlineSubsystemAccelByte*>(IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM));
if(AccelByteOSS == nullptr)
{
// AccelByteOSSが見つからない場合は中止
return;
}
FOnlineSessionV2AccelBytePtr SessionInterface = StaticCastSharedPtr<FOnlineSessionV2AccelByte>(AccelByteOSS->GetSessionInterface());

// ローカルセッション設定データを取得し、属性で更新
FOnlineSessionSettings* SessionSettings = SessionInterface->GetSessionSettings(NAME_GameSession);
SessionSettings->Set(FName("attributename"), TEXT("attributeValue"));

// セッション更新完了のデリゲートをリスニング
FDelegateHandle UpdateSessionCompleteHandle;
UpdateSessionCompleteHandle = SessionInterface->AddOnUpdateSessionCompleteDelegate_Handle(FOnUpdateSessionCompleteDelegate::CreateLambda(
[&SessionInterface, &UpdateSessionCompleteHandle](FName SessionName, bool bWasSuccessful)
{
// ここで更新完了後に何かを実行
// 再度トリガーされないようにデリゲートハンドラを削除
SessionInterface->ClearOnUpdateSessionCompleteDelegate_Handle(UpdateSessionCompleteHandle);
}));

SessionInterface->UpdateSession(NAME_GameSession, *SessionSettings);
備考

マッチチケットで属性を使用しているセッションがマッチメイキングから作成された場合も、属性が入力されます。

更新の競合を処理する

セッションデータを更新するリクエストは、更新リクエストのバージョンがバックエンドのバージョンと等しい場合にのみ受け入れられます。

Unreal OSSでは、競合する更新のために更新リクエストが失敗した場合、OSSはセッションデータを更新し、最新のバックエンドデータをクエリします。その後、更新に失敗したセッション設定を渡しながら、AddOnSessionUpdateConflictErrorDelegate_Handleで設定されたデリゲートをトリガーします。その後、更新セッション呼び出しを再試行できます。

SessionInterface->AddOnSessionUpdateConflictErrorDelegate_Handle(FOnSessionUpdateConflictErrorDelegate::CreateLambda(
[](FName SessionName, FOnlineSessionSettings FailedSessionSettings)
{
// 更新の競合のためにセッション更新が失敗した場合に何かを実行
}));

セッション属性を読み取る

セッション属性は、ゲームセッションの詳細をリクエストすると返されます。

FOnlineSubsystemAccelByte* AccelByteOSS = static_cast<FOnlineSubsystemAccelByte*>(IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM));
if(AccelByteOSS == nullptr)
{
// AccelByteOSSが見つからない場合は中止
return;
}
FOnlineSessionV2AccelBytePtr SessionInterface = StaticCastSharedPtr<FOnlineSessionV2AccelByte>(AccelByteOSS->GetSessionInterface());

// 属性値を取得
FString Attribute{};
SessionInterface->GetSessionSettings(NAME_GameSession)->Get(FName("attributename"), Attribute);

セッションデータ更新の通知をリスニングする

セッションに更新があると、セッション内の各ユーザーに通知が送信されます。更新があるかどうかを知るために、この通知のリスナーを追加できます。

FOnlineSubsystemAccelByte* AccelByteOSS = static_cast<FOnlineSubsystemAccelByte*>(IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM));
if(AccelByteOSS == nullptr)
{
// AccelByteOSSが見つからない場合は中止
return;
}
FOnlineSessionV2AccelBytePtr SessionInterface = StaticCastSharedPtr<FOnlineSessionV2AccelByte>(AccelByteOSS->GetSessionInterface());

UpdateNotificationHandle = SessionInterface->AddOnSessionUpdateReceivedDelegate_Handle(FOnSessionUpdateReceivedDelegate::CreateLambda(
[&UpdateNotificationHandle, &SessionInterface_User2](FName SessionName) {
// セッション更新デリゲートが受信されたら何かを実行
}));