If you want to lean into networking with Unity, you currently have three main contenders that are free and open source:
The quick summary is as follows:
- Mirror suffers from design choices and technical debt. Unless you are a beginner who appreciates the many examples and community, I can not recommend this solution for one thing only: it does not use discrete simulation time steps (ticks) but rather relies on resolving “delta time” between clients. In other words: you cannot have reliable, smooth client-side prediction.
- Netcode for GameObjects is the solution to go to if you trust Unity and none other. You will get the most help for it on the Unity forum and other sites, too. However, it still lacks features that devs have come to expect from a realtime networking solutions, so be sure to check the roadmap. For instance, at the time of this writing (March 2023) NGO didn’t yet have client-side prediction.
- Fish-Net is great, hands down! It was created out of dissatisfaction with Mirror and because it was a new project that didn’t have to account for compatibility, it matured within a year of its first release. It is currently heads and bounds ahead of NGO in terms of features and you’ll get plenty of support too.
In case you are wondering: what about the 50 other networking solutions for Unity? Well, for one, MLAPI and UNet – both by Unity – have long been deprecated respectively are superceded by NGO.
And if you open that comparison matrix spreadsheet and look at the bottom, you will find a tab with a comprehensive list of Unity Networking Solutions. Including closed-source / paid solutions, where primarily Photon stands out.
If neither Photon nor the beforementioned solutions satisfy your project’s (niche?) requirements, you can look on to see if any of the other solutions better suit your project.
If you have little to no networking experience yet, you don’t need to look any further. Just go for one of the four mentioned above and you’ll be fine.