Sessions インターフェース

オンライン ゲーム セッションの作成と管理を行います。

Online Services の Session インターフェース は、オンライン ゲーム セッションの作成、破棄、および管理を処理します。セッション は、ゲーム内のオンライン対戦を表すもので、プレイヤーのマシンまたは専用サーバーで実行されます。セッションには、以下の参加ポリシーがあります。

  • Invite Only (招待のみ):招待されたプレイヤーがセッションに参加できます。

  • Friends Only (フレンドのみ):セッション メンバーのフレンドがセッションに参加できます。

  • Public (パブリック):誰でもこのセッションを検出して、参加できます。

パブリック セッションは、フィルタとして機能する一連のプロパティを使用して定義することができます。フィルタを使用することで、プレイヤーは特定のゲーム モードやマップを検索することができます。

API の概要

次の表は、Sessions インターフェースに含まれる関数の概要です。

関数

説明

Get Sessions (セッションの取得)

GetAllSessions

ユーザーが参加しているすべてのセッションへの参照の配列を取得します。

GetSessionByName

指定された名前を持つセッションへの参照を取得します。

GetSessionById

指定された ID ハンドルを持つセッションへの参照を取得します。

Presence (プレゼンス)

GetPresenceSession

ユーザーのプレゼンス セッションとして現在設定されているセッションへの参照を取得します。

IsPresenceSession

指定された ID を持つセッションがユーザーのプレゼンス セッションとして設定されているかどうかを特定します。

SetPresenceSession

指定された ID を持つセッションをユーザーのプレゼンス セッションとして設定します。

ClearPresenceSession

ユーザーのプレゼンス セッションをクリアします。

Session Management (セッションの管理)

CreateSession

指定されたパラメータを使用して新しいセッションを作成します。

UpdateSessionSettings

指定された名前で識別されるセッションの設定を更新します。

LeaveSession

指定された名前で識別されるセッションを退出し、必要に応じて破棄します。

FindSessions

指定されたパラメータに一致するセッションについてセッション サービスをクエリします。

JoinSession

指定されたセッション ID を持つセッションに参加します。

StartMatchmaking

マッチメイキング プロセスを開始します。これは、指定した検索フィルタに一致するセッションを検索して参加するか、該当するセッションが見つからない場合は、指定されたパラメータを使用してセッションを作成します。

AddSessionMember

指定された名前で識別されるセッションに、ユーザーを新しいセッション メンバーとして追加します。

RemoveSessionMember

指定された名前で識別されるセッションからユーザーを削除します。

Invites (招待)

SendSessionInvite

指定された名前で識別されるセッションへの招待を、指定されたすべてのユーザーに送信します。

GetSessionInviteById

指定された招待 ID で識別されるセッションへの招待に対する参照を取得します。

GetAllSessionInvites

ユーザーが受け取ったすべてのセッションへの招待に対する参照の配列を取得します。

RejectSessionInvite

指定された招待 ID で識別されるセッションへの招待を拒否します。

Event Listening (イベントのリッスン)

以下の結果として、イベントがトリガーされます。

OnSessionJoined

セッションへの参加。

OnSessionLeft

セッションからの退出またはセッションの破棄。

OnSessionUpdated

セッションの設定の更新、またはセッション更新イベントの受信時。

OnSessionInviteReceived

セッションへの招待の受信。

OnUISessionJoinRequested

セッションへの招待の受け入れ、またはプラットフォーム UI からのセッションへの参加。

プロセス フロー

セッションのライフサイクル

  • 目的の設定を使用して新しいセッションを作成します。

  • セッションの存続期間中いつでも、セッションを更新して、そのセッションが表すオンライン対戦のプロパティで変更を反映させることができます。これらの変更には、以下が含まれます。

    • セッションが検索でどのように表示されるか、またはまったく表示されないかに関するパラメータを変更する。

    • ゲーム進行中のセッションに新しいプレイヤーが参加することを制限する。

  • セッションを検出したプレイヤーが、セッションに参加することができます。

  • セッションに参加して取得した情報を使用して、セッション ホストまたは専用サーバーに接続することができます。

    • 接続後、プレイヤーはセッションに登録する必要があります。今後のリリースでは、このプロセスは、エンジンで自動的に処理されます。

  • ゲームをプレイします。

  • ゲーム終了後、プレイヤーはセッションから退出するか、セッションを破棄することができます (プレイヤーがオーナーまたはホストの場合)。

  • セッションからのプレイヤーの登録解除に続けて、ホストまたはサーバーからの切断が行われる必要があります。今後のリリースでは、このプロセスは、エンジンで自動的に処理されます。

作成

セッションのライフサイクルの最初のステップは、希望のパラメータを使用してセッションを作成することです。これらのパラメータには、セッションの存続期間を通じて一定であるもの (CreateSession 関数の bIsLANSession および bAllowSanctionedPlayers など) と、いつでも更新できるもの (SessionSettings 関数で提供されるオプションなど) があります。

プレゼンス セッション として設定できるのは、ユーザーごとに最大 1 セッションです。つまり、そのセッションがユーザーのプレゼンス情報に表示され、Presence インターフェースを通じて公開されるため、フレンドやフォロワーが見ることができます。ユーザーが多くのセッションのメンバーである場合、どのセッションをプレゼンス セッションとして表示するかは、SetPresenceSession で変更できます (この機能は、すべてのプラットフォームの実装で使用可能であるわけではありません)。

検出

ユーザーは、次の複数の方法で新しいセッションを検出することができます。

検索

FindSessions を使用すると、ユーザーは目的のセッションのカスタム設定に一致するタグや特定のユーザー ID などの検索パラメータを定義して、フレンドが参加しているセッションを見つけることができます。この関数により、キャッシュされたセッション情報を表すセッション ID のリストが返され、ユーザーは GetSessionById で検索してアクセスすることができます。

招待

ユーザーは、他のユーザーからセッションへの招待を受けることができます。招待を受け取ったユーザーは、GetSessionInviteById で招待にアクセスすることで、そのセッションに関する情報を表示することができます。その後、ユーザーは招待情報によって提供されたセッション ID を持つセッションに参加するかどうかを決定します。

プレゼンス

特定のプラットフォームの UI では、フレンドが参加したセッションの情報をユーザーに表示することができます。

参加

ユーザーは、検索、招待、またはプレゼンスのいずれかによって取得したセッションに関する情報を得ると、JoinSession を呼び出してそのセッションへの参加を試みることができます。また、この新しいセッションを SetPresenceSession を使用して自分のプレゼンス セッションとして設定するかどうかを選択することができます。

マッチメイキング

セッションに参加するもう 1 つの方法は、StartMatchmaking を呼び出すことです。この関数は、CreateSessionFindSessions を組み合わせた動作を実行します。StartMatchmaking は、事前に定義された一連の検索フィルタに一致するセッションを検索し、見つからない場合は指定された情報を使用してセッションを作成します。

セッションに参加したら、その対戦に参加するために必要なプラットフォーム固有の接続情報を返す IOnlineServices::GetResolvedConnectString を呼び出すことができます。その後、この関数から取得した文字列を APlayerController::ClientTravel または UWorld::ServerTravel に渡すことで、プレイヤーを対戦に進ませることができます。移動が成功すると、プレイヤーはセッションに追加され、AddSessionMember が呼び出されて、プレイヤーがセッションに登録されます。

招待

セッションを作成するか、参加することでセッションに参加したら、SendSessionInvite を使用して他のプレイヤーにセッション情報を送信することができます。これは、同じオンライン対戦でフレンドを集めるうえで有効な方法です。招待を受け取ったプレイヤーは、GetAllSessionInvites を使用してその情報にアクセスすることで、指定したユーザーのすべての招待にアクセスしたり、GetSessionInviteById を使用して、特定の招待に関する情報を取得したりすることができます。また、パラメータとして対応する招待 ID を渡すことで、RejectSessionInvite への呼び出しを使用して、セッションへの招待を拒否することもできます。

更新

セッションの存続期間中は、UpdateSessionSettings を呼び出すことで、いつでもセッションの設定を更新することができます。これらの設定には、以下が含まれます (ただし、以下に限定されない)。

  • セッションの最大プレイヤー数

  • 以下のセッションの参加ポリシー:

    • Invite Only (招待者のみ)

    • Friends Only (フレンドのみ)

    • Public (パブリック)

  • 新規プレイヤーへのアクセス制限

  • カスタム設定およびユーザー定義パラメータの追加、変更、削除

退出および破棄

LeaveSession を呼び出すことでセッションから退出することができます。セッションの所有者は追加パラメータ bDestroySessiontrue に設定すると、退出時にバックエンド サービスからセッションを削除できます。この場合は、セッションの他のすべてのメンバーも強制的に退出させられます。

OnlineServices インスタンスへの参照を使用して、Sessions インターフェースにアクセスすることができます。ここから、Sessions インターフェースの機能が公開されます。以下に、Sessions インターフェースにアクセスして同期および非同期の操作を実行する例をいくつか紹介します。

名前でセッションを取得する

UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
UE::Online::ISessionsPtr SessionsInterface = OnlineServices->GetSessionsInterface();
UE::Online::FGetSessionByName::Params Params;
Params.SessionName = FName(TEXT("MySession"));

UE::Online::TOnlineResult<UE::Online::FGetSessionByName> Result = SessionsInterface->GetSessionByName(MoveTemp(Params));
if(Result.IsOk()) 
{
    TSharedRef<const UE::Online::ISession> Session = Result.GetOkValue().Session;
    // now we can read information from the session
}

ウォークスルー

  1. デフォルトのオンライン サービスを使用します。これには、次のようにパラメータを指定することなく GetServices を呼び出します。

    UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
  2. デフォルトのオンライン サービスの Sessions インターフェースにアクセスします。

    UE::Online::ISessionsPtr SessionsInterface = OnlineServices->GetSessionsInterface();
  3. GetSessionByName を呼び出すために必要なパラメータを使用して FGetSessionByName 構造体を初期化します。

    UE::Online::FGetSessionByName::Params Params;
    Params.SessionName = FName(TEXT("MySession"));
  4. GetSessionByName を呼び出して、前のステップのパラメータを渡し、その結果を保存します。

    UE::Online::TOnlineResult<UE::Online::FGetSessionByName> Result = SessionsInterface->GetSessionByName(MoveTemp(Params));
  5. 関数呼び出しがエラーをスローせず、結果にアクセスできることを確認した後、GetSessionByName への呼び出しの結果を処理します。

    if(Result.IsOk()) 
    {
        TSharedRef<const UE::Online::ISession> Session = Result.GetOkValue().Session;
        // now we can read information from the session
    }

セッション設定の更新

UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
UE::Online::ISessionsPtr SessionsInterface = OnlineServices->GetSessionsInterface();

UE::Online::FUpdateSessionSettings::Params Params;
Params.LocalAccountId = AccountId;
Params.SessionName = FName(TEXT("MySession"));
Params.Mutations.bAllowNewMembers = false;

SessionsInterface->UpdateSessionSettings(MoveTemp(Params))
.OnComplete([this](const UE::Online::TOnlineResult<UE::Online::FUpdateSessionSettings>& Result)
{
    if(Result.IsError())
    {
        const UE::Online::FOnlineError OnlineError = Result.GetErrorValue();
        // update was not successful, process OnlineError
        return;
    }
    // update was successful
});

ウォークスルー

  1. デフォルトのオンライン サービスを使用します。これには、次のようにパラメータを指定することなく GetServices を呼び出し、デフォルトのオンライン サービスの Sessions インターフェースにアクセスします。

    UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
    UE::Online::ISessionsPtr SessionsInterface = OnlineServices->GetSessionsInterface();
  2. UpdateSessionSettings を呼び出すために必要なパラメータを使用して構造体を初期化します。

    UE::Online::FUpdateSessionSettings::Params Params;
    Params.LocalAccountId = AccountId;
    Params.SessionName = FName(TEXT("MySession"));
    Params.Mutations.bAllowNewMembers = false;
  3. エラーになった場合はエラーまたはクエリした統計情報を、ラムダ関数で OK が返された場合はその結果を処理することで、UpdateSessionSettings.OnComplete コールバックを処理します。

    SessionsInterface->UpdateSessionSettings(MoveTemp(Params))
    .OnComplete([this](const UE::Online::TOnlineResult<UE::Online::FUpdateSessionSettings>& Result)
    {
        if(Result.IsError())
        {
            const UE::Online::FOnlineError OnlineError = Result.GetErrorValue();
            // update was not successful, process OnlineError
            return;
        }
        // update was successful
    });

Online Subsystem のコードを変換する

Online Services の Sessions インターフェースは、Online Subsystem の Sessions インターフェース が所有するすべてのコードに対応しています。

詳細情報

ヘッダ ファイル

必要に応じて、Sessions.h ヘッダ ファイルを直接確認してください。Sessions インターフェースのヘッダ ファイル「Sessions.h」は次のディレクトリに格納されています。

UNREAL_ENGINE_ROOT\Engine\Plugins\Online\OnlineServices\Source\OnlineServicesInterface\Public\Online

UE のソース コードの入手方法については、「Unreal Engine のソース コードをダウンロードする」のドキュメントを参照してください。

関数パラメータおよび戻り型

関数パラメータおよび戻り型 (パラメータの渡し方、関数が戻す結果の処理など) については、「Online Services Overview (Online Services の概要)」ページの「Functions (関数)」セクションを参照してください。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル