World/Udon Bugs & Feature Requests

Post about current World or Udon bugs feature requests. One item per post!
Non-constructive and off-topic posts will be moved or deleted.
Manual Udon sync fails despite successful serialization
Manual synchronization stops updating synced variables on non-owner clients with certain field configurations, despite the owner reporting successful serialization. In the failing cases, the non-owner receives OnDeserialization, but the synced fields remain at their initial values. ENVIRONMENT ──────────────────────── Unity: 2022.3.22f1 VRChat Worlds SDK: 3.10.4 Tested with actual VRChat clients in the same instance STEPS TO REPRODUCE ──────────────────────── Attach the provided Float20SyncProbe and Double20SyncProbe scripts to separate GameObjects. Assign a separate TMP text display to each script. Upload the world and join the same instance with two players. The owner assigns new values and calls RequestSerialization() every 10 seconds. Compare the owner's values with the non-owner's values on the displays and in the logs. Both scripts use Manual synchronization. Only the owner writes the synced fields. Neither script uses FieldChangeCallback or calls Networking.SetOwner. Despite their filenames, the attached scripts currently contain: Float20SyncProbe: 27 synced floats. Double20SyncProbe: 14 synced doubles and 1 synced int. EXPECTED RESULT ──────────────────────── The non-owner's synced fields should update to match the owner's serialized values. ACTUAL RESULT ──────────────────────── With the failing configurations, the non-owner's fields remain at their initial values. Reducing the number of synced fields restores normal synchronization. TEST RESULTS ──────────────────────── All configurations below were tested without FieldChangeCallback. 2 doubles : Worked 2 floats : Worked 13 doubles : Worked 26 floats : Worked 14 doubles : Worked 27 floats : Failed 14 doubles + 1 int : Failed 20 doubles : Failed Earlier tests also reproduced the issue with 20 doubles using FieldChangeCallback, while 20 floats worked. Removing FieldChangeCallback did not resolve the double20 failure. The results suggest that the amount or layout of synced data may be involved, but the exact cause is unknown. POSSIBLY RELATED REPORTS ──────────────────────── A single UdonSharpBehavior with VRC Enable Persistence cannot store more than 108 bytes of the same variable type https://feedback.vrchat.com/persistence/p/a-single-udonsharpbehavior-with-vrc-enable-persistence-cannot-store-more-than-10 PlayerObject Persistence Fails to Respect Sync Mode https://feedback.vrchat.com/persistence/p/playerobject-persistence-fails-to-respect-sync-mode Those reports concern Persistence restoration. This issue occurs during ordinary owner-to-non-owner synchronization within the same instance. REPRODUCTION MATERIALS ──────────────────────── The attached scripts reproduce the issue independently and display each client's local synced values, receive count, consistency check, and serialization result.
0
·
Bug Reports
A Proper HTTP Client
VRChat is more than a social game. We've been shown that many times, and even more with the recent(ish) launch and popularity explosion of FISH!. This is a community that welcomes dynamic games and activities. We already have access to DownloadString in Udon, which is a undeniably a great tool for creating Dynamic Experiences. Combined with "Allow Untrusted URLs", it has powered popular experiences like "Geolocator", among others, for quite a while now. I believe that API should be extended, providing a proper HTTP Client (including URL interpolation). Being able to dynamically craft URLs and issue POST Requests (with content bodies) would enable creators & technical developers to easily connect to their own backends. This would allow for creator-driven experiences such as global leaderboards, dynamic content, and much more, without creating any extra strain in the VRChat Infrastructure. Furthermore, potentially adding WebSocket capabilities to the client would allow for realtime-intensive games to propagate their information using external infrastructure, reducing or completely removing the strain that they create. Some may argue that in the sense of content/world moderation, such an API would add an extra attack surface for "badly intended" users, however, I would like to state that any I cannot see any form in which this would be riskier than the current API we have. Information like User IP address can already be gathered via DownloadString, and any potentially dangerous hosts can be dynamically blocked via a global blocklist (combine that with a Roslyn analyzer, and creators could even be warned at build-time).
0
·
Feature Requests
Load More
→