My world has developed issue with (at least) two scripts having syncing issues. I know about these two due to them having logging, but they both used to work.
On one, it doesn’t ever log OnDeserialization happening, nor any udon exceptions I can see - and all the local aspects of it appear to still work.
Script is marked (via annotation) a manual synced. The sync code is simple — variable = json, RequestSerialization, log that it was sent. The log message is being logged when the first person joins the world.
Additional joiners wait for OnDeserialization, and that logs success OR failure at parsing, and has no other way out of OnDeserialization except exceptions. Nothing is logged. So data is being set, but not received. Variable is [UdonSynced] and private.l though I tried making it public. I don’t think I modified this script since it worked.
The other is the opposite:
in this case there are two udon scripts on the game object. One marked [NoVariableSync], the other is manual. In debug view both are shown as manual. In this case OnDeserialization logs receiving data 2-4 times per second. There IS a code loop here as the synced script is a helper — it gets the synced data, calls the main script with it, then the main script calls all listeners to alert them to data having changed. The helper has a check and throws it away if it’s unchanged and returns, doing nothing. In this case, I only see this on the second joiner as well (but there is no special check for this condition this time!) when the update method is called it logs both when it sends and ignores the data, and it’s only logging ignored statements. The first person in the instance logs neither event happening, nor OnDeserialization being called.
If the associated button is manually toggled the syncing DOES work…
This second script was definitely not changed.
I did change from the beta sdk (had a bug fix I needed) to the updated stable sdk.
But at this point I’m at a loss.