UE5 と Epic Online Services を BP のみで利用してみる (セッション検索・破棄)

UE5 と Epic Online Services を BP のみで利用してみる (セッション作成・一覧・参加) - You are done!

上記の続きです。

EOS でプレイヤー数が増えないのは

前の記事の最後で EOS の Developer Portal でセッションがどのようになっているかを確認しました。

その際に参加プレイヤーが 0 になっていました。これに関しては、(おそらくこの状態の) BP からは使えない API を利用する必要があります。

プレイヤーを登録する Sessions Interface | Epic Online Services ドキュメンテーション

ざっと引用します。

プレイヤーがセッションに参加すると、セッション所有者はプレイヤーをセッションに登録する必要があります。これにより、バックエンド サービスがプレイヤー数を継続的に認識できるため、セッションが満杯になるとセッションのアドバタイズを停止できます。EOS では、EOS_Sessions_RegisterPlayers 関数を使用して一度に複数のプレイヤーを登録できます。次のデータを含む EOS_Sessions_RegisterPlayersOptions 構造体を使用して、所有しているクライアントからこの関数を呼び出します。

プレイヤー数は UE 内で GameMode 等で管理することもできますが、そこで数を数えた上でセッションの Advertise を変更せずとも自動で EOS 側でやってくれるのは便利そうです。

また「プレイを開始および終了する」の項にもあるように、Join In Progress のオプションを有効にすることで、開始後のセッションへの「参加の試みを拒否」する機能にも使えます。
残念ながら Join In Progress を有効にしても、 Join Session 自体は拒否できないためあくまで「参加 (RegisterPlayers)」の API に対してのようです。

この辺りは、今回の「BPのみ」の主旨から外れるのでここまでにしておきます。

セッション検索

検索を構成する Sessions Interface | Epic Online Services ドキュメンテーション

今回はおそらく最も使うであろう属性の検索を行います。

セッション作成時に属性を付与

もちろん Update Session でも同様のことができます。この状態で作成されたセッションを確認すると以下の赤枠のように属性が追加されていることがわかります。

セッション一覧時にフィルタする

これに関しては2つのフィルタ方法があります。

Find Sessions のクエリにフィルタを付与 Find Sessions の結果に対してフィルタ

通常はクエリに対してフィルタを付与することになりますが、さらにローカルで絞り込みをしたいといった場合には結果に対してのフィルタもできます。

ドキュメントにもある通り、数値であれば検索条件も完全一致以外にもできるので何かと利用できそうです。

セッション破棄

セッションの破棄は簡単です。

上記で破棄が行われ、Developer Portal からもセッションは確認できない状態になります。

余談 セッションの開始と終了

Join In Progress で少し触れましたが、セッションは作成と破棄とは別に開始 (Start Session)と終了 (End Session) が存在します。

プレイを開始および終了する Sessions Interface | Epic Online Services ドキュメンテーション

以下にノードを紹介していますが、まず Create Advanced SessionStart After Create にチェックをすると、作成と同時に開始状態を経て進行中になるということです。今回の一連の記事ではこれを利用していました。

Get Session State から得られる Enum の値からも分かる通り、状態は細かく分かれているようです。

参考にさせていただいた記事