In VRChat SDK 3.10.5, a
NoVariableSync
UdonSharp behaviour appears to cause other behaviours on the same GameObject to switch from Manual to Continuous synchronization.
We encountered this issue in our world, “すーはー式ごいた”.
The issue is now resolved in our world by explicitly setting all affected behaviours to Manual. This is a world-side workaround; we have not confirmed a fix in the SDK itself. The current version of our world therefore no longer reproduces the original issue.
Affected setup
Each game piece had three UdonSharp behaviours on the same GameObject:
  • KomaScript
    : Manual
  • ManualSync_suuhar
    : Manual
  • UdonImageOwnerSpriteRenderer
    : NoVariableSync
We observed piece object positions rolling back and a drop in FPS due to excessively frequent 'OnDeserialization()' calls.
Diagnostic findings
During approximately four minutes of testing, our logs recorded:
  • Over 40,000 deserialization callbacks, including identical to the previous reception.
  • Increasing send timestamps on all duplicate receptions.
  • 62 explicit
    RequestSerialization()
    calls, but 1,856
    OnPreSerialization()
    callbacks and 1,856 successful
    OnPostSerialization()
    callbacks.
For one piece, two explicit serialization requests resulted in 58 serialization callbacks over approximately 14 seconds, with a median interval of 0.239 seconds.
Changing
UdonImageOwnerSpriteRenderer
from
NoVariableSync
to
Manual
, so that all three behaviours explicitly use Manual, resolved the reported issue in our testing.
Suggested reproduction
  1. Add a Manual-synced UdonSharp behaviour with synced variables to a GameObject.
  2. Add another UdonSharp behaviour marked
    NoVariableSync
    .
A
NoVariableSync
behaviour should remain compatible with Manual behaviours on the same GameObject without switching them to Continuous.
Environment
Currently, resolved in the world using SyncMode.Any