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
を呼び出すことです。この関数は、CreateSession
と FindSessions
を組み合わせた動作を実行します。StartMatchmaking
は、事前に定義された一連の検索フィルタに一致するセッションを検索し、見つからない場合は指定された情報を使用してセッションを作成します。
セッションに参加したら、その対戦に参加するために必要なプラットフォーム固有の接続情報を返す IOnlineServices::GetResolvedConnectString
を呼び出すことができます。その後、この関数から取得した文字列を APlayerController::ClientTravel
または UWorld::ServerTravel
に渡すことで、プレイヤーを対戦に進ませることができます。移動が成功すると、プレイヤーはセッションに追加され、AddSessionMember
が呼び出されて、プレイヤーがセッションに登録されます。
招待
セッションを作成するか、参加することでセッションに参加したら、SendSessionInvite
を使用して他のプレイヤーにセッション情報を送信することができます。これは、同じオンライン対戦でフレンドを集めるうえで有効な方法です。招待を受け取ったプレイヤーは、GetAllSessionInvites
を使用してその情報にアクセスすることで、指定したユーザーのすべての招待にアクセスしたり、GetSessionInviteById
を使用して、特定の招待に関する情報を取得したりすることができます。また、パラメータとして対応する招待 ID を渡すことで、RejectSessionInvite
への呼び出しを使用して、セッションへの招待を拒否することもできます。
更新
セッションの存続期間中は、UpdateSessionSettings
を呼び出すことで、いつでもセッションの設定を更新することができます。これらの設定には、以下が含まれます (ただし、以下に限定されない)。
- セッションの最大プレイヤー数
- 以下のセッションの参加ポリシー:
- Invite Only (招待者のみ)
- Friends Only (フレンドのみ)
- Public (パブリック)
- 新規プレイヤーへのアクセス制限
- カスタム設定およびユーザー定義パラメータの追加、変更、削除
退出および破棄
LeaveSession
を呼び出すことでセッションから退出することができます。セッションの所有者は追加パラメータ bDestroySession
を true
に設定すると、退出時にバックエンド サービスからセッションを削除できます。この場合は、セッションの他のすべてのメンバーも強制的に退出させられます。
例
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;
// これで、セッションから情報を読み取ることができるようになりました
}
ウォークスルー
-
デフォルトのオンライン サービスを使用します。これには、次のようにパラメータを指定することなく
GetServices
を呼び出します。UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
-
デフォルトのオンライン サービスの Sessions インターフェースにアクセスします。
UE::Online::ISessionsPtr SessionsInterface = OnlineServices->GetSessionsInterface();
-
GetSessionByName
を呼び出すために必要なパラメータを使用してFGetSessionByName
構造体を初期化します。UE::Online::FGetSessionByName::Params Params; Params.SessionName = FName(TEXT("MySession"));
-
GetSessionByName
を呼び出して、前のステップのパラメータを渡し、その結果を保存します。UE::Online::TOnlineResult<UE::Online::FGetSessionByName> Result = SessionsInterface->GetSessionByName(MoveTemp(Params));
-
関数呼び出しがエラーをスローせず、結果にアクセスできることを確認した後、
GetSessionByName
への呼び出しの結果を処理します。if(Result.IsOk()) { TSharedRef<const UE::Online::ISession> Session = Result.GetOkValue().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();
// 正常に更新されませんでした。OnlineError を処理します
return;
}
// 正常に更新されました
});
ウォークスルー
-
デフォルトのオンライン サービスを使用します。これには、次のようにパラメータを指定することなく
GetServices
を呼び出し、デフォルトのオンライン サービスの Sessions インターフェースにアクセスします。UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices(); UE::Online::ISessionsPtr SessionsInterface = OnlineServices->GetSessionsInterface();
-
UpdateSessionSettings
を呼び出すために必要なパラメータを使用して構造体を初期化します。UE::Online::FUpdateSessionSettings::Params Params; Params.LocalAccountId = AccountId; Params.SessionName = FName(TEXT("MySession")); Params.Mutations.bAllowNewMembers = false;
-
エラーになった場合はエラーまたはクエリした統計情報を、ラムダ関数で 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(); // 正常に更新されませんでした。OnlineError を処理します return; } // 正常に更新されました });
Online Subsystem のコードを変換する
Online Services の Sessions インターフェースは、Online Subsystem の Sessions インターフェース が所有するすべてのコードに対応しています。
詳細情報
ヘッダ ファイル
必要に応じて、Sessions.h
ヘッダ ファイルを直接確認してください。Sessions インターフェースのヘッダ ファイル「Sessions.h
」は次のディレクトリに格納されています。
Engine\Plugins\Online\OnlineServices\Source\OnlineServicesInterface\Public\Online
UE のソース コードの入手方法については、「Unreal Engine のソース コードをダウンロードする」のドキュメントを参照してください。
関数パラメータおよび戻り型
関数パラメータおよび戻り型 (パラメータの渡し方、関数が戻す結果の処理など) については、「Online Services Overview (Online Services の概要)」ページの「Functions (関数)」セクションを参照してください。