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

マッチメイキングエラー処理 – ベストプラクティス

Last updated on February 4, 2026

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

マッチメイキング接続エラーの処理は、スムーズなプレイヤーエクスペリエンスを確保するために重要です。接続の問題が発生した場合、ゲームはプレイヤーに明確なフィードバックを提供し、適切に回復を試みる必要があります。適切なエラー処理を実装することで、フラストレーションを防ぎ、プレイヤーがゲームプレイを中断することなく迅速に再接続できるようになります。マッチメイキング接続の問題を処理する方法:

  • 各ステップのデリゲートのエラーに基づいて明確で有益なメッセージを表示し(マッチメイキングの開始、セッションへの参加、DSへの移動など)、プレイヤーがマッチメイキングフローが失敗した理由を理解できるようにします。DSでのプレイフローのリファレンスについては、Byte Warsチュートリアルモジュールを使用できます(Unreal EngineまたはUnity)。
  • ロビー接続が失われた場合、マッチメイキング機能を無効にします。
  • マッチメイキングの各ステップでポップアップまたはメッセージに手動再試行オプションを表示します。

マッチメイキングエラー処理

Unreal Engine OSSには、マッチチケットのステータスを確認するための組み込みのポーリングシステムがあります。マッチチケットがマッチメイキングサービスで正常に作成されると、システムは15秒ごとに更新をポーリングします。ポーリングは、マッチチケットが見つかるか、マッチメイキングサービスで見つからない(エラーコード520303で応答)場合に自動的に停止します。ただし、接続の中断が発生してもプレイヤーがログインしたままの場合、ポーリングは完了するまでバックグラウンドで実行され続けます。

...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto SessionInterface = ABSubsystem->GetSessionInterface();
SessionInterface->OnMatchmakingCompleteDelegates.AddWeakLambda(this, [this](FName SessionName, bool bWasSuccessful)
{
if (bWasSuccessful)
{
// マッチメイキングリクエストが成功したときに何かを実行します。
}
else
{
// 失敗したリクエストを処理するソリューションを実装します。
}
});
...

現在、マッチメイキングが失敗した場合、AGS OSSは失敗がWebSocketタイムアウトによるものか、別の問題によるものかについての詳細を提供しません。

セッション参加エラー処理

...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto SessionInterface = ABSubsystem->GetSessionInterface();
SessionInterface->OnJoinSessionCompleteDelegates.AddWeakLambda(this, [this](Name SessionName, EOnJoinSessionCompleteResult::Type Result)
{
if(Result == EOnJoinSessionCompleteResult::Success)
{
// ゲームセッションへの参加が成功したときに何かを実行します。
}
else
{
// 失敗したゲームセッション参加リクエストを処理するソリューションを実装します。
}
});
...

現在、マッチメイキングが失敗した場合、AGS OSSは失敗がWebSocketタイムアウトによるものか、別の問題によるものかについての詳細を提供しません。

セッションタイムアウト処理

プレイヤーが何らかの理由でセッションサービスから切断された場合、セッションサービスはプレイヤーをセッションの非アクティブメンバーとして識別します。非アクティブメンバーにはInactive Timeout制限があり、ここで設定できます。WebSocket接続タイムアウトよりも大きいInactive Timeoutの値を設定して、WebSocketが正常に再接続されたときにプレイヤーがまだゲームセッションにいることを確認できます。

ゲームセッションの回復

プレイヤーがWebSocket接続から切断されたが、セッションサービスによってゲームセッションから削除されていない場合、ゲームクライアントはセッションを復元できます。これは、WebSocket接続が正常に再確立されると、プレイヤーがシームレスにセッションに戻ることができることを意味します。

  1. ゲームセッションを復元します。
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto SessionInterface = ABSubsystem->GetSessionInterface();
SessionInterface->RestoreActiveSessions("<UserId>",
FOnRestoreActiveSessionsComplete::CreateWeakLambda(this, [this](const FUniqueNetId& LocalUserId, const FOnlineError& ResultState)
{
if (ResultState.bSucceeded)
{
// ゲームセッションの復元が成功したときに何かを実行します。
}
else
{
// 失敗したリクエストを処理するソリューションを実装します。
}
})
);
...
  1. ゲームセッションの復元に成功した後、DSに再参加します。
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto SessionInterface = ABSubsystem->GetSessionInterface();
auto ABSessionInterface = StaticCastSharedPtr<FOnlineSessionV2AccelByte>(SessionInterface);
FString ServerAddress = "";
ABSessionInterface->GetResolvedConnectString(Name_GameSession, ServerAddress);
APlayerController::ClientTravel(ServerAddress, TRAVEL_Absolute);
...