Best Network Service to Use for a 3D multiplayer game for 10-15 Players.

I am starting a project for a 3D multiplayer game for 10-15 players. I was wondering what would be the best Network service to use.
I do not have sufficient funds to invest into the project so the service must be free.
I am looking into Mirror, Photon, MLAPI, DOTS.
I would prefer there to be detailed Tutorials available for the use of the server I select.

My research suggested that MLAPI uses UNET for the transport layer and since UNET is in the sunset portion of its existence I was discouraged from using it. However, is it possible to change the transport layer dependency in a not too complex way?

I read on a Forum that Photon Unity Network is only for 2-8 players which does not meet my requirements. However Photon Quantum does support more players. I was wondering if this API is also free?

Mirror seems to be the preferred option at the moment. However I have not found the server protocol Mirror uses primarily nor do I know the maximum players it can support.

Performance is of some importance. The game cannot have a major latency issue. I may need to look into predictive systems/Deterministic rollback. Suggestions for those are also appreciated.

Thank you in advance. The sooner I can decide this the better it will be.

1 Like

In my opinion, Mirror is your best bet for zero cost and the most flexibility. The author of mirror also has a handful of game templates for mmo, survival, and moba game types which you can buy and learn from or use as a basis for your game design.

As far as how many players you can support, it depends on the game type, and what hardware & network you have on your server, but you can Google for what games are built on mirror and you can see that they can easily support the scale you are talking about.

And as far as to what “protocol” it supports, with mirror you don’t really have to get that deep into the network thinking to run it on a server. To stand up a mirror dedicated “server” you would just compile a headless build of your whole game and run that build on your server. Mirror takes care of most of the rest of the magic.

Note also that vis2k has recently released a new DOTS based network stack calls DOTSNET, but I’d consider that product beta, and I wouldn’t build a game based on it yet unless you need gigantic multiuser numbers (I think his stress test was > 400 players in the same room).

1 Like
  • Photon Unity Networking handles 20CCU in its free package - anything above will cost you $95 or more per month (see Pricing).
  • Photon Quantum costs $1,000/month (see Pricing).

I’d go with Mirror or MLAPI.

2 Likes

What do you think would perform better in terms of latency, Mirror or Photon?
Which one of those do you think is simpler to implement?

For Photon PUN I know it says It can have 20CCU but I saw somewhere the game capacity per room is 2-8 players. Can photon run a single server room with 15 players in it at the same time?

TL; DR: Design your game mechanics around limiting your multiplayer to the absolute minimum numbers and stick with Mirror + Unity. In my opinion, it gives you the most likely path to shipping your game and you will learn tons on how to scale your next game’s match size up to much larger numbers by going this route first.

Latency is a really hard one to pin down without having your game already setup so that we can talk about what is slowing things down. It could be network, disk io, CPU bottlenecks, too much data going over the network, your serialization / deserialization, and probably others I forgot.

If you are wanting to spend the extra time up front here to get the absolute best performance from your server, I don’t recommend building your server in Unity at all. Instead, go with a c++, C, or RUST for your server backend, and then write your own network stack on the C# client side which transmits just the bytes you know need to go over the wire between the client and server. That is the absolute best way to get the highest performance and to push your server to its physical limits with the fastest possible response to every user input.

Now, with that said, if you aren’t already a seasoned multiplayer developer, I’d say to stick with one platform like Unity and C#, and then just pick Mirror, Photon PUN, or MLAPI and design your game around the logical limits of what that platform is known to have.

The benefits that you get in that trade off are:

  • you have just one code base to maintain
  • you get a huge increase of developer efficiency because you aren’t having to jump back and forth compiling each project with different toolchains, just to test each new feature you add
  • you can ask in forums for the particular framework for help (since others will be having the same challenges you do)
  • because of all of the above, you are much more likely to finish your game :slight_smile:

Photon PUN’s 20 CCU limit is a pricing tier of ALL USERS across ALL MATCHES, not a technical limit per match. As for how many you can put into a match, the same problem we have talking about latency applies here.

I don’t have a lot of experience with PUN yet, but I doubt PUN would stop you from joining 100 users to a run if you have that CCU level. But if you did, your server is going to have a hard time keeping up with 60FPS because that means that it has about 16.67ms to get network input, process the whole game sim with input from 100 users, and send the updated data back to all those users. The amount of work the server is having to do, and the packets it is having to read and send back for every frame will be the biggest limit to how many people you have in each match.

Also, as I understand Photon PUN, you don’t have too much control on the server architecture nor on exactly what is being sent and read back across the wire, which is why I have chosen Mirror for my project.

There are ways to mitigate complex server loads per match such as:

  • calculate areas of interest within a match and only accept and transmit data that is important to those users on this thread
  • run a multithreaded server with a shared in-memory simple data store such as Redis or MongoDB for data that needs to be shared between threads
  • split responsibilities of different domains such as position/rotation to one thread or server with other things such as inventory, bullet fire, damage calculation, voxel deforming done on another thread or server.

But again, doing all of that could slow down your game by years so I highly recommend designing your game to not need any of that super-high-performance stuff for now.

Sorry for the wall of text, but hopefully the TL; DR helps :smiley:

There is a lot of good input already in this thread but some uncertainty about PUN and or Quantum.
Disclaimer: I work at Exit Games and on PUN. I’m a developer and not in marketing, so I hope this isn’t too “ad”-like to post.

The limit of players per room in Photon is primarily about the bandwidth and resources (CPU time) that are being used. PUN is powering games with 16 players but there are a few games with up to 32 players, too. The latter requires some trickery how to update everyone. PUN is made to be simple but this also takes some options.
The server for PUN does not run Unity and does now know about the game scenes and assets. It is an “advanced relay” which is fine for most games. The benefit is that relaying works well and is cheap.

The pricing for Photon is about the matchmaking and hosting and is CCU based (players at the same time). There is a 100 CCU one-time “subscription”, which runs 60 months. It’s frequently at sale in the Asset Store as PUN 2 Plus.
While Mirror, MLAPI and others are absolutely free, they also offer absolutely no hosting for matchmaking or dedicated servers. You will have to figure this out and may have to manage server.

Also, we would not suggest to host a mobile game with more than 4 players on random devices. It will be frustrating if the host drops and 3+ others will also lose the connection.

Aside from that: You can make great games with each of the commonly suggested networking solutions. There are pros and cons everywhere and in best case, you invest a little time to prototype your ideas and figure out which you like best.

Is their a video tutorial for mirror that walks you through all the aspects of making the multiplayer game? or something you can recommend.

1 Like