Why Are You Doing Custom Scene Movement?

A common question I get is why am I not using:

NetworkManager.ServerChangeScene

to change scenes on the invector characters? Instead of doing what these custom registered NetworkMessages are doing?

NetworkServer.RegisterHandler<JumpToScene>(ClientRequestedJumpToScene);
NetworkServer.RegisterHandler<FinishedMoving>(PlayerFinishedSceneMove);

What Is NetworkManager.ServerChangeScene?

This is a custom NetworkMessage that Mirror has already setup to help transition ALL clients to a new scene. It can also update the OnlineScene name for new joining clients to force them to the new scene when they join. It's important to note that it achieves this by destroying the "player" object and recreating that object in the new scene. That also destroys all client owned objects from the scene as well.

This is very nice if you want a simple switch everyone to a new scene without worrying about preserving character attributes.

What Is The Custom Method?

The custom method is a series of custom registered network messages that allows for individual client owned objects to be moved between one additive scene and another seperatly. So if one client owned object is traveling from Scene A to Scene B but another client is not this method will support this, while the above method will not.

It also has the other added benefit of ACTUALLY moving the objects between scenes properly. Not destroying them and re-creating them in the new target scene. Thereby character attributes are preserved.

Of course this also ties into a lot of other great features like auto scene cleanup, "jump to point" functionality, callable by clients(not just the server), and callback delegates.