So Im currently at the mercy of a multiplayer/replication/server connection issue that ive been struggling with for the past week. Here’s the rundown:
What Im working with:
It’s a launcher-based, blueprint-based UE4.25.4 project with VR capability that performs multiplayer over LAN or direct IP connections. It doesnt use the new OpenXR standard (the project is 4.25), and is made with Oculus HMD’s in mind. The only online subsystem I’m using is ‘Null’ and the only non-default plugins that I’m using (that I need to use) are LiDar Point Cloud, Export Panorama, and Low Entry Extended Standard Library.
A coworker and I were happily working on network replication of the player assets. At this stage, everything is fine; the listen-server loads a map with the listen option and the client, via the ‘open’ console command, could connect over the local network perfectly fine. We’re getting close to being done with the work, when, randomly, for no apparent reason, the software stops connecting the client properly. We packaged, attempted to connect, and the client had lost server functionality. So we un-did what we’d done, repackaged, and got the same result. So we double-checked our connectivity logic (based on Multiplayer Shootout), re-packaged, and the joining player gets a black screen.
About two days later I thought I had a breakthrough with the connection logic, so I package and test and the project was at the stage it was at before the issue when we thought we were close to done. Cool, I think, so I back up that project as ‘kinda working’ and show my co-worker. Then we re-package the ‘kinda working’ project without any changes and we got a different result (black screen on client connect). That, my fellow devs, was extremely frustrating. We had got a different result in two different packaged builds with the exact same project.
What I did to fix it:
We first tested a working MP build of a different project, made with a different version (tested and working like a year ago), and it worked fine. This project is old and built from source so Im not going to re-package with it now.
Then we got a fresh download of Multiplayer Shootout, changed the version to 4.26, packaged it as-is (after correcting the ‘Player Name’ variable in the Player State and setting the OnlineSubSystem in engine.ini, and it worked fine.
Thirdly, I deleted my 4.25 engine files and redownloaded the whole engine. Then I got a fresh copy of Multiplayer Shootout and packaged it as-is (after correcting the ‘Player Name’ variable in the Player State and setting the OnlineSubSystem in engine.ini) and then things got interesting… So we’re talking about 2 PCs here, both Windows 10, both comparable hardware, both used as UE4 development machines. One (Mine) can host and join fine, everything working correctly. The other, however, when it hosts or joins, sees only a black screen but can be seen by the other player and even play the game despite the black screen. This is true whether the Mine or Other hosts or joins. I havent tested with a third machine yet.
Notes & relevant info
Connection is taking 15-20 seconds every time, including when the server-player loads a listen map.
The software is leaving processes running in Windows named with the project’s name, as well as crash reporter processes, none of which show anything on screen and we wouldn’t have even noticed if I wasn’t using a temp folder for packaged builds and Windows wont let me move the builds without ending these processes.
I filled the project with Print Strings in the connection logic and whats happening seems to be that the player controller cant possess pawns properly and, in fact, doesnt seem to exist server-side. The joining player’s Player Controller fails to cast to the game mode in a Run On Server RPC.
I feel like Im spinning my wheels trying to figure out WTAF is going on here. I hate the feeling of iterating on trial and error, especially when it comes to code that should be working fine and, in fact, did work fine until it spontaneously didn’t.
I would greatly appreciate any help anyone can give me that will point me in the right direction.