Unreal Engine 5でオンライン機能を作る際に躓いていたので、解決方法を残しておきます。
Online Subsystem Steam が動かない!
UE5には、オンライン通信しやすくする機能「Online Subsystem」があります。
僕は、それを使って、ロビー機能を実装しています。
通信には、Steam(よくPCゲーム買う所)を利用すると簡単です!
しかしUE5.7では、これが公式のドキュメント通りに動かしても動かないです。
前提条件
UE5.7の話になります。(UE5.6でも同じ問題が起きているらしい。)
もしかすると、後々のバージョンで修正される話かもしれません。
オンライン機能を実装するのに以下のプラグインを有効化しています。
- Online Subsystem Steam
- UE5についているSteamのオンライン機能
- Socket Subsystem Steam (IP)
- Online Subsystem Steamから一部機能が分離したプラグイン
- 今回躓いた原因はこれ!
- Advanced Sessions Plugin
- 有志が作成しているBPでオンライン通信できるプラグイン
- とても使いやすい!!
「Steam Sockets」プラグインを利用する方法も解決策として挙げられていましたが、今回は使いません(無効化してます)。
駆け足で実装の説明
ロビー画面のレベルを作り、そこでオンライン接続用のウィジェットを作成。
「ルームID」入力欄と「接続」ボタンを設置。(あと終了ボタンも。)
接続ボタンを押したらルームIDの検索(FindSessionsAdvanced)を行い、一致するルームが存在したら接続(Join Session)、なければ作成(CreateAdvancedSession)を行いレベルに移動します。

公式ドキュメントからの修正箇所
公式のドキュメントのリンクを加えておきます。
このドキュメントですが、UE5.7では、このままでは動かないです。
Online Subsystem Steam の一部機能(ネットドライバー機能)が Socket Subsystem Steam IP に移行されているらしい。
なので、DefaultEngine.iniファイルに書き込む内容の一部、OnlineSubsystemSteam を SocketSubsystemSteamIP に置き換えました。
[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/SocketSubsystemSteamIP.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
[OnlineSubsystem]
DefaultPlatformService=Steam
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
bUsesPresence=true
bInitServerOnClient=true
bUseLobbiesIfAvailable=true
bUseSteamNetworking=true
bAllowP2PPacketRelay=true
[/Script/SocketSubsystemSteamIP.SteamNetDriver]
NetConnectionClassName="/Script/SocketSubsystemSteamIP.SteamNetConnection"
少し、個人的な調整も入っているのですが、これで、Online Subsystem Steamが動くと思います。(AppIDとかは開発用です。)
それでも、もし、起動してすぐロビーに戻される場合、Steam自体が起動してない場合があるので、Steamを起動してから試してみてください。
ゲーム開発中
いつもはUE5でアニメーションを作っていますが、UE5の理解を深めたくて、ゲームを作り始めました。
まだゲーム制作は初心者なので、手探りで勉強していますが、こんかいの記事がだれかのヒントになれれば嬉しいです。

コメント