Hi @keiranlovett welcome
- using Unity.
- there are “worlds” which are just unity scenes.
- each unity instance has a different world/scene loaded due to how Unity works.
- each unity instance will hold 50 min 100 max users.
This sounds like you want to use a “session-based multiplayer model” with headless Unity instances for your game. This works well for 3D physics intensive games where you can leverage the full physics support in the game engine to handle collisions, ray tracing, etc, etc. You could host with GameLift, Agones, or similar tools for this purpose.
The challenge with this model is you’d want to maintain a manifest of the available shards and how to connect to them. Usually the specifics around how this works depends on the service or tools you use to manage the server fleet. In what ever way you obtain this information you’ll end up with some kind of instance IDs which can be used to “address” the shard.
How do I then matchmake myself to a friend who is already in a session?
You can have the player share the instance ID they’re on as a status update. These can then be subscribed to by users in their friends list. Whenever the player enters an instance they’d update their status with that specific instance ID.
Have a look at status updates and let me know if you’d like me to describe it in more detail: Status - Nakama server
I could be completely wrong with the approach you want to use because it depends on the specific details of the MMO whether you even need the headless Unity instances or could instead represent “rooms” with the Nakama Authoritative Multiplayer Engine. If you’d like to discuss that approach instead let me know.