It should not really matter whether the clients and servers are using the same project or not. It would not be weird to have a server that has no 3D, just a GUI, or even no rendering at all and only physics and database.
I believe that the question is relevant when even when the server and the client use the same project. Imagine an open world multi-player. Alice Bob and Charlie are playing the game, Alice is hosting, Bob and Charlie are clients.
Alice, Bob and Charlie are exploring three different areas of the world, they all have their own creatures, NPCs, inventories, quests and treasures. Alice’s server has the three areas loaded at once, even though only one is layered for rendering on her main camera. Each area has NetworkView objects that were created with Network.Instanciate when Bob and Charlie joined, some are destroyed and others created during play. Until now, everything’s fine.
Problem: Charlie is coming back to Bob’s area. Remember, it’s an open world, there’s no loading scene. Charlie loads the terrain (that’s static, no network sync). But what about the creatures and the rest? The Server can send to Charlie a list of creatures to spawn (there are ten giant spiders in the forest) with a RPC, but these creatures are already existing on Alice’s and Bob’s computers, and their NetworkViews are already connected. How do Charlie’s spiders start following the orders from Alice’s server?
I have not found anywhere in the documentation how to connect NetworkViews. I’ve looked under Network, NetworkView, NetworkViewID, NetworkPlayer, nothing. It may not be possible.
The only solution that I am seeing now is to use buffered Remote Procedure Calls and using one NetworkView.group per area. As soon as Charlie enters Bob’s area, Charlie suddenly receives all the RPCs that have been buffered while he was gone. Charlie’s computer has a lot of catching up to do: as every door opened by Bob, every monster killed and every chest looted is fast-forwarded in a single frame. This should work. Things that have been Network.Instantiated between Alice and Bob have been queued as RPCs so Charlie will receive them. Indeed, Network.Instantiate is a buffered RPC, this is written there: Unity - Scripting API: Network.Instantiate .