Unity Network Solutions
This is my own qualified overview of the prominent Network Solutions out there used to make Multiplayer Games with the Unity Engine.
This is meant to give an understanding of what the different solutions out there are, which one to go for and which to stay away from.
Unity Networking (UNet)
When you want to play around with multiplayer functions and want to learn how RPCs and State-Synchronization works you can use UNet.
UNet give no access to source code and does not have as advanced features as other network libraries.
With that said you can just code those features yourself without any problem!
UNet is not the solution to go for with MMO games or fast-paced games with Lots of players due to a larger packet size used in the networking.
But for standard FPS Coop & PvP games with 20v20 players or couch arcade games, RTS games, RPG games etc. it works brilliantly!
UNet and uLink will give you the best understanding of Multiplayer Programming due to not "hiding" code that is run or generating automatic code with a UI wizard which makes you have a hard time to understand what it happening and how to modify the code like in Forge Networking Remastered.
uLink - UnityPark Suite
I would recommend this over all other for learning Multiplayer Programming from start to end!
uLink has great tutorials and example projects with multiple scenes over the network etc.
uLink is an extremely powerful and intuitive Network Solution with great features.
One of my favorite features is that it can instantiate different GameObjects for Server, Client and Proxy.
uLink is unfortunately discontinued, it works perfectly and can be used in commercial games but it does not support Unity Versions above 5.0.4.
There is no active community or support from the company.
The company behind uLink (Muchdifferent) owns the Worldrecord for most concurrent players in a first-person shooter using uLink and their revolutionary loadbalancer Pikkoserver that makes it possible for several servers to manage the players in a single area. Usually only one server can handle one area in MMOs.
They smashed Planetsides worldrecord of 399 concurrent players with a massive 999 concurrent players, using uLink!
Forge Networking Remastered (FNR)
FNR is a great solution with due to it being free and open-source with a pretty active community.
This network solution opens up for any type of multiplayer game that you want to develop.
FNR is open-source and written in C# which makes it future proof unlike other network libraries that does not give you the source code.
FNR is harder to get started with than UNet or uLink due to it not being integrated the same way in Unity but with some Unity and programming experience it's no problem, and the community is there to help via Discord!
FNR can use TCP/UDP/RUDP unlike uLink and UNet that only uses UDP/RUDP.
FNR is designed to be used in an Authoritative Design, but you can write your multiplayer code to make the game Non-Authoritative or P2P with NAT Punchthrough or however your want your multiplayer game to function.
FNR was first developed inside of Unity but to get away from the limitations of that, a new Remastered version was created from scratch separate from Unity. This means that you can create native C# applications outside of Unity which run on FNR to support your games and applications such as Matchmaker, Relay Servers, Proxy Servers, Chat Servers, Master Servers, Cache Servers, Websocket Servers, you name it!
FNR is completely free with no hidden fees or any cost for concurrent players etc.
Hosting is done as you please, depending on how you design your game and program the server.
You can easily host an Amazon AWS server and run the Game Server there.
There are free Amazon AWS servers that can be used for development and early testing.
With all that being said!
I personally find FNR clunky and annoying to work with.
It forces you to use a Tool in the UI of Unity Engine to choose which parameters you want to network, and it generates a bunch of code around that which you later on use in the script that you want to network.
This also makes it very hard to split up your code into Server, Client and Proxy versions which really is the way to go for a propper multiplayer game.
Their tutorials are not showing any solutions for Dedicated Authoritative Servers which I think is the way to go, which makes it hard to plan out a real game outside of the tutorials that are nowhere close to real network coding scenarios.
Photon offers a few different solutions depending on what you need.
Photon Bolt is a P2P connection solution going through Photons own cloud computers.
Photon PUN is Photon Unity Networking, an extension of the Unity Networking (UNet).
Photon has a bunch of useful features and seems pretty easy to get into and get started with due to the free tier of their server hosting.
Photon is designed so that they host your servers and you pay them for that hosting.
That means that if you were to create a successful game that becomes popular you'll need to pay 185 USD / month for each 1000 concurrent players.
That can become a hefty sum and you can find yourself locked into the Photon hosting system when you design your game for a single hosting system from the start.
You will get a significantly lower price per CCU running your own game-servers on an Amazon AWS Server!
I'm against anything that tries to be consumer-friendly just to hook or lock-in customers to their solution.
Do not design your game to work only with a specific 3rd-party program! What if that 3rd-party program flops?
I recommend programming your Client and Server separately and building them to separate executables that can run by themselves anywhere.
That way you can host your own server at home or have your players host their own servers or you can launch Amazon AWS servers to host your own without any fees for concurrent players. And if you find a better deal you just move there.
A P2P Connection via a separate server like Photon Bolt is designed can be programmed by yourself and run for free, it's called a Proxy Server.
Matchmaker is also easy to program yourself and run parallell to your Proxy / Master server with InterProcess Communication between them.
Both of these solutions can be made with UNet, uLink or Forge Networking Remastered (FNR).
I'm not saying that Photons Network Solution for Multiplayer Programming is at fault!
It most likely works perfectly and is easy to use and lets you network your game quickly and securely.
I'm just against the whole business model and design because when you do make a successful game it will cost you loads of cash because you have designed you whole game to only work with one hosting service.