[1539] Later-Joiner's `OnVariableChanged` can be fired before `Start()` if the object owner syncs variables frequently
LefTonbo
On Later-Joiner's client,
OnVariableChanged
can be fired without OnDeserialization()
before OnEnable()
and Start()
. It will be happened especially if the object owner uses RequestSerialization()
frequently (such as per second interval synchronization).It can be critical problem because it makes
OnEnable()
and Start()
are not guaranteed before synced variable changes: firing OnVariableChanged
before Start()
can breaks Udons that implementing initialization at Start()
.This bug seems the reoccurrence of following this Canny: https://feedback.vrchat.com/udon/p/1259-synced-variables-can-be-changed-from-owners-requestserialization-before-lat
Build: 1539
----
I've made the new testing world to check event orders: https://vrchat.com/home/world/wrld_c357c8f1-1d22-4e91-bfdc-e72c04097fe1/info .
(Sample screenshot is attached below)
Reproduction steps:
- Make the instance of the world (Player A), join the instance then enable interval sync from "Toggle Sync Interval" buton. (It starts 0.25s interval of synced int increment using manual sync)
- Join another player to its instance (Player B).
- See the console UI in the world at Player B.
Expected Results:
- At Player B console UI, "SyncInt change" console message should only be occured before "OnEnable".
Actual Results:
- At Player B console UI, there is small chance to occur "SyncInt change" console message before "OnEnable".
- It may sometimes not be occurred, so try re-joining several times.
Log In