I’m a fairly new user of Unreal Engine, and I’m currently in the early stages of investigating solutions for server architecture for a multiplayer life sim game that I’m working on.
The initial version will be for a relatively small number of players, but I want to leave the door open for future expansion to support a much larger number. The three options I’m tossing up between are as following, I’d love to hear any insights or recommendations from anyone with experience in this space.
1. Using Unreal’s built-in replication system.
Obviously, what is really attractive about this option is the built-in replication out of the box, especially for player movement and server-side collision detection. (There won’t really be any complex combat mechanics or any other features that require reliable and fast network replication.)
The main limitation here is the concern around future scalability to a much larger number of players.
Additionally, my game will not be open-world, but rather will have the world split up into many different maps that players will travel between. Unreal’s server architecture doesn’t support this use-case, since it expects a single World. I’m aware of solutions like sub-levels and level streaming, but again, this won’t scale to a larger number of players.
2. Building a custom server and netcode
This is something I’ve got prior experience with (having done development with private servers for some famous MMORPGs in the past, as well as building a server for my previous multiplayer game).
I’m expecting implementing high-quality synced movement that handles latency well to be the most time-consuming network-related task. I’m guessing Unreal’s Replication is quite good at handling network latency out of the box?
Server-side collision detection will also need a custom solution.
3. Use a third-party solution
- Haven’t looked far into these just yet, but from a quick search, it seems like Nakama, PhotonEngine and SpatialOS are the main ones to look into. Any suggestions or recommendations here? Will these solutions provide what I need out-of-the-box (movement syncing and server-side geometry/collision detection)?