The Photon Forum
is Closed Permanently.

After many dedicated years of service, we have made the decision to retire our Forum and switch to read-only: we´ve saved the best to last! Your search result can be found below. Plus, we offer support via these channels:

Try Our

Please check if you can find an answer in our extensive documentation on Fusion.

Join Us
on Discord

Meet and talk to our staff and the entire Photon-Community via Discord.

Stack Overflow

Find more information on Stack Overflow (for Circle members only).

Write Us
an E-Mail

Feel free to send your question directly to our developers.

Shared mode: how to ensure only a single object is spawned, and one client always has authority

2022-11-25 06:29:15


Question 1

I'm trying to implement a networked scene loader in Shared mode. Only one of these can ever exist, with the current shared master client having authority over it. How can I achieve this?

Here is what I am doing now:

  • When OnConnectedToServer() fires and we are the master client -- and there is no other NetworkSceneManager object in the scene -- spawn our NetworkSceneManager object.

This seems like it could be prone to a race condition if the master client happens to disconnect at almost the same time that a new client connects and is selected as master to replace it. In that case, I am not sure that the existing NetworkSceneManager object will be visible to the connecting client when OnConnectedToServer fires.

It seems like I need to know when it is safe to query for existing objects before spawning the new one. The host/client network scene loading example does something I don't understand: it effectively checks in the object's Spawn() method whether another of the same object already exists and then de-spawns if so. I think this only works because the host has state authority, so it will always despawn "newer" objects.

In Shared mode, the situation is much trickier.

There is potentially a second way: in Spawned(), check to see whether multiple instances of the same object exist and only despawn the one we have authority over. Seems a bit hacky.

Question 2

The master client spawns this single object somehow. Ok. How do I ensure state authority is properly transferred when that client disconnects? I don't want to end up in a state where the new master fails to realize it momentarily lacks state authority over the object and tries to set some network properties on it (e.g., tries to load a scene). What is the pattern commonly used here?

The obvious solution is messy: have an IsMaster property that checks whether we are the shared master and whether we have state authority over all of the singleton objects we need. Is there a better mechanism?




Back to top