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.
VRCObjectSync doesn't sync Gravity/Kinematic flags reliably
Gravity and Kinematic flags on VRCObjectSync components don't sync correctly right now and also cannot be set correctly while holding the pickup. To set gravity or kinematic flags, VRChat added two new methods for us: https://udonsharp.docs.vrchat.com/vrchat-api/#vrcobjectsync (they are supposed to behave like a synced variable) There are two bugs related to this: ~ Bug 1: ~ All you need is to create a pickup that has no gravity and then toggle the gravity flag on the VRCObjectSync component with an external button after claiming ownership. Then you let different people in the world pick up the pickup and drop it (to show their own local state). In my tests, this resulted in a pickup where the gravity flag is wildly different on each client and only syncs occasionally or not at all. They would see the pickup drop on my end, but when they pick it up it has no gravity for them. ~ Bug 2: ~ All you need is to create a pickup that has no gravity and then toggle the gravity flag on the VRCObjectSync component in OnPickupUseDown() . In my tests, this resulted in a pickup where the gravity stays enabled after the first OnPickupUseDown() and I am unable to turn gravity off again. To check gravity, the pickup is dropped. You can also just test it out here: Right setup: Bug 1 / Left setup: Bug 2 https://vrchat.com/home/world/wrld_9cefd5ec-4492-43c5-8cd3-05036c494556 Additional note: Since we only got a setter and not a getter method, we are left in the dark here when it comes to analyzing the problem. Reading out the local rigidbody state doesn't give us access to the real synced state. A getter method should be added.
3
·

tracked

[1123] Udon Objects with Udon Children initialize late despite execution order overrides
To reproduce: Create a behaviour with ExecutionOrder -100000 Create a child of it with another behaviour with no execution order overrides Create a behaviour with ExecutionOrder -100000 and NO child objects as a control Create a new separate behaviour with ExecutionOrder +100000 Add a log to Start() to keep track of it Expected result: Behaviours with -100000 to log first Behaviours with no override to log second Behaviours with +100000 to log third What actually happens: Behaviours with -100000 and NO children log first Behaviours with no override log second Behaviours with +100000 log third Behaviours with -100000 WITH children log fourth Repro world: https://vrchat.com/home/world/wrld_f43e6a53-97c2-4a6b-88af-60612f4b3cce This also creates another large issue If you also try to disable those -100000 objects (with Default children) via the +100000 Start() method - the -100000 behaviour will enter a broken state where it will never initialize or receive any events no matter what. You can toggle them on and off after - no methods will ever fire I have created a test world that illustrates the above: https://vrchat.com/home/world/wrld_06ab5f32-ffbe-44dd-9930-b3b28074fcfd Checking the logs when loading in - you'll see a bunch of objects logging OnEnable (the ones that report withChild False ), and a bunch of Default objects which are children of other -100000 objects. Then they will all get disabled by the +100000 behaviour. Clicking the sphere enables those -100000 parents, but they never log either Start() or OnEnable
2
·

tracked

Load More