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
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.