I suggest looking at MLAPI (my own) and continue to look if Photon fits your needs. Photon is good for what it is, but if you need something similar to UNET I suggest my own MLAPI.
As for Mirror, I suggest you be careful. The Mirror project seems to be ran on pride rather than creating a good product. Mirror is just a fork of UNET, and since the project was forked, little evolution has occured. That’s not to say it’s not changed. It has changed. Things have been removed, others added. But no real project evolution or major features have been introduced in years.
The project authors want to appeal to a uninformed audience by stating “MMO Scale”. This is only backed up by nonsense benchmarks with no real value. I have asked for real benchmarks that shows the raw speed, but the requests have been ignored. (Source: Mirror forum thread, also their Readme contains links to benchmarks).
I submitted a bug report over 2 months ago containing a servere security flaw that allows you to bypass authentication in Mirror. The author closed the bug report saying it was fixed when it was not. (It has since been reopened, but not fixed yet). This shows that security is on low priority. MLAPI for example takes this very seriously, we offer built in encryption. (Source: Potential ghost clients: Client side connection initiation · Issue #721 · MirrorNetworking/Mirror · GitHub)
For a long time, the Mirror licence discredited their contributors. It stated that Vis2k, the author of Mirror owned all copyright which he did not. I pointed it out in a GitHub issue, it was closed with a comment stating that someone told them to do so. This is super dishonest and just not right. It has since been fixed, but still shows that great lengths go to not fix simple things. (Source: Fix licence typo · Issue #952 · MirrorNetworking/Mirror · GitHub)
The project developers prefer to give you answers rather than features. They explain away things because of lacking competence or otherwise. As an example, Host migration (in fairness, a fairly complicated feature to implement) was included in UNET. It was stripped from Mirror like a year back. The reason stated in the commit message was that it was not stable. Instead of fixing it, it was removed. When people later asks the developers why it was removed, it was stated “it relied on third party Unity services”. This is incorrect, A clueless answer with no correction after being pointed out. (I can provide source if needed)
Its further reflected in issues like this: SSL for websockets · Issue #947 · MirrorNetworking/Mirror · GitHub
SSL is pretty much a must, and they dont want to do it right now, so they close the issue. Instead of fixing it, sweep it under the rug. Simpler hey. Make it look good, dont make it actually be any good. This occurs for most features, requests and redesigns. Someone proposes, closed with “not right now” type of message.
Simple things like that shows that the operation of the open source project is sketchy. It’s ran by pride rather than a strong development. Instead of creating good features, and a fast library. They rather post bogus benchmarks that are impossible to get any useful data from instead of adding the features and making it faster. Mirror is thus not something I would use for production for the given reasons.
You can look at a nice feature chart found here: https://mlapi.network/features/ (anyone can modify this chart, it’s fair)