I’ve been trying to get my project to create/join Steam games for a week now, without success. I feel like I must be missing something basic and obvious, but I don’t know what.
Multiplayer was working successfully over LAN via creating/finding/joining sessions with the null online subsystem. I added Steam by following these instructions, and the game is unable to find any sessions. I’ve tried with and without bInitServerOnClient. Without, the server fails to create the session (even though it’s not a dedicated server). With bInitServerOnClient=true, the joiner can’t find the session. I’ve tried running two copies on the same machine (from the Editor and from the command line), and I’ve also tried the packaged game on two different machines, with different Steam users logged in. I have a Steam AppID, but I’ve also been trying with 480.
I also tried writing the create/find/join code in C++ following this example, so that I could try setting bUseLobbiesIfAvailable on the session. No success.
I read in a couple of places that Steam sessions are broken or at least highly finicky in 4.27, so I created a brand new project in 4.26 and created the simplest multiplayer game imaginable. It works with the null online subsystem, but not Steam.
I thought maybe there was something wrong with the network setup in my apartment, so I tested Steam multiplayer, and I can host and join Steam games with a friend, from this machine.
Sorry this is so long. Thank you for your attention. Any help would be appreciated.
A couple of specific questions:
How does the Steam overlay actually work? That is, how does the game establish a connection to the local Steam client? I’ve noticed that it sometimes doesn’t work. It consistently doesn’t work for some combinations of logged in Steam user, machine and method of running the game, but even for the right combinations it just fails sometimes.
What’s going on with sessions vs. lobbies? I gather sessions are an Unreal thing, and lobbies are a Steam thing, and bUseLobbiesIfAvailable tells Unreal to implement the session by means of a lobby if possible, is that right?
What does bIsLANMatch do in the case of Steam? Does Steam have its own way of advertising games over LAN? I’ve tried bIsLANMatch with Steam, and the joining game can find the session, but complains that the session data is corrupt and fails to join.