Okay, update time!
Thank you for all the comments and engagement! It’s been very helpful for our decision making so far, and we appreciate everyone that took the time to respond so far.
Based on your feedback and internal discussion, we will not ship the full master transfer behaviour for now, and only reconsider once we have a clear path for a transition that would not affect prefab authors disproportionately.
Initially we thought the upsides of such a system (much lower chance of mobile players affecting instance stability) were great enough to outweigh the downside of affecting some existing content or prefabs. The feedback we’ve received shows that especially prefab maintainers disagree with this due to the scope of breakage and increased complexity, even if a toggleable solution were to be implemented.
Let’s continue the conversation on some other aspects though!
New APIs
We are considering adding the following APIs to Udon scripts to allow for code to be written more agnostic to such behaviour in the future:
OnPlayerSuspended(VRCPlayerApi remotePlayer)
OnMasterTransferred(VRCPlayerApi previousMaster, VRCPlayerApi newMaster)
VRCPlayerApi Networking.GetMaster()
VRCPlayerApi Networking.GetInstanceOwner()
Names not final - I made them up on the spot to communicate the intent :)
The idea here is to give creators the tools to handle such situations themselves, but not break any existing content. The burden of a proper fix would still be on you, but the implementation becomes optional.
Timeouts
As mentioned before, we are looking at fixing and improving our existing network timeouts too. Our current design plan differs a bit from what we had before:
- 1 minute timeout after suspend for master client
- 3 minutes for any non-master player
This helps mitigate the issue to some extent by kicking unresponsive master players faster than others.
Just to be clear, these are also subject to change, and in no way should you be relying on these numbers in your scripts :) They are communicated here solely for feedback gathering.
Intelligent Master Selection
To quote ourselves from the original post:
- We’re considering changing [master selection] separately. When the current master leaves, the new could instead chosen based on other factors (for example, preferring PC clients or choosing players with a stable internet connection).
- We believe the potential of breaking content with just this change is low enough that it could be worth releasing it [even without master transfer].
Thoughts specifically on that? The only breakage here would be if scripts rely specifically on master having the lowest ID, or always switching to the oldest player. This new behaviour would still only trigger when the current master leaves for good.
As before, this is obviously a balancing act. The upside of this change could be an improved game experience in a wide variety of worlds, and a reduced chance for the original (completely instance breaking!) bug to occur.