Nested MultiplayerSynchronizers with differing public visibilities

Godot Version

4.2.2

Problem

Scene1

Node1  # Properties replicated by MultiplayerSynchronizer1.
┖╴MultiplayerSynchronizer1

Scene2

Node2  # Properties replicated by MultiplayerSynchronizer2.
┖╴MultiplayerSynchronizer2  # public_visibility may be false.
┖╴Scene1

Steps

  1. Spawn Scene2 using a MultiplayerSpawner.

  2. Set MultiplayerSynchronizer2’s public_visibility to false. Its root_path is set to Node2, so the spawner will despawn Scene2 on peers that MultiplayerSynchronizer2 is not visible to.

  3. MultiplayerSynchronizer1 (still public) tries to replicate its properties across all peers, but some peers don’t have the necessary nodes in the tree.

Also see this discussion, where I initially came up with a workaround that I would like to replace with something better.

Potential Solution

Set a MultiplayerSynchronizer’s root_path to a node other than the scene root (even though it will still only be syncing the scene root’s properties).

I think this is better than my original workaround, but I’m unsure of whether this is misusing root_path.

Question

Is there a better way to solve this problem while still keeping the solution simple?

I don’t understand the issue. And your solution doesn’t explain the issue.

When public visibility is set the rpc’s of the node only go to the visibility group filter that needs to be manually set. I assume it is authority or all by default at the least.

The second potential issue for nested synchronizerns is that you shouldn’t have any reliance on the parent that may or may not be synchronized based on visibility. More concerned for remote instances.

I don’t understand the issue. And your solution doesn’t explain the issue.

Ah, sorry about that. :sweat_smile:

I made some clarifying edits. Does this give you a better idea of what the issue is?

Who is the authority and how do you determine it is not working?

There was a comment of a an open issue from your post

1 Like