AwesomeNET allows you to easily add crossplatform mulitplayer and matchmaking capabilities to your game. Completely without writing networking code or players tossing around IP adresses or forwarding ports. Just start the server, and add a script to every object that should act synchronized on every client and FIRE!
The AssetStore tool comes with a server you can easily run yourselve that also supports matchmaking functionallity like creating or joining game rooms, great doccumentation, examples, tutorials and completely open code for you to learn from or modify to your needs. It is extremely easily integratable to existing games as the only code change that needs to be made is the call of the function you want to run online.
As you or your players can host the server by yourselve/themselve there are no subscriptions or monthly costs. Buy AwesomeNET once and use it for free forever.
All communication is handled by a script called NetworkController. Once this is connected you just add another script called NetworkGameObjectConnector to every object you want to add network functionality to. This script has a GUI in which you can register every function you want to run online. Now you just have to change the execution of your networked action from e.g. Cube.Drop() to RunNetworkCommand("Cube.Drop") and the method will execute on every connected client. Please see the Doccumentation for detailled manuals and examples.