No description
Find a file
2026-03-04 21:37:51 +01:00
.github/workflows Add better release woorkflow 2024-11-15 15:06:33 +01:00
Editor Add experimental warning 2026-03-04 21:37:51 +01:00
Media Update preview gifs 2024-06-21 18:30:45 +02:00
Resources Revert prefab changes, we need to keep the rigidbody and joint 2026-03-04 21:34:49 +01:00
.gitignore Add package.json and License 2024-05-02 21:07:52 +02:00
Editor.meta initial commit 2024-05-02 21:07:52 +02:00
LICENSE Add package stuff 2024-05-02 21:07:52 +02:00
LICENSE.meta Add package.json and License 2024-05-02 21:07:52 +02:00
Media.meta Add package stuff 2024-05-02 21:07:52 +02:00
package.json Update package json 2024-08-23 19:14:35 +02:00
package.json.meta Add package.json and License 2024-05-02 21:07:52 +02:00
README.md Update README 2024-08-23 19:14:45 +02:00
README.md.meta Add package stuff 2024-05-02 21:07:52 +02:00
Resources.meta Move objects 2024-05-02 21:07:52 +02:00

Custom Object Sync

Generic badge Generic badge Generic badge Generic badge Generic badge

Generic badge Generic badge

Sync objects across the network with custom range, precision, and parameter usage.

Preview

⬇️ Download Latest Version

📦 Add to VRChat Creator Companion


How it works

  • Contacts and Physbones read the location and rotation of your object(s).
  • Parameter Drivers convert this location and rotation into boolean values.
  • Those boolean values are synced over the network in multiple steps. Choosing more steps means we can use fewer parameters.
  • Once the values arrive at the remote side, they get converted back into floats.
  • These floats get used to set the object back in its place on the remote side.
  • This can be useful when:
    • You want to late sync a world drop.
    • You want to fly an object around and have it sync reliably.
    • You have an object that moves based on some local-only/fps dependent mechanism.

Install guide

https://github.com/VRLabs/Custom-Object-Sync/assets/76777936/4d12a815-bb1f-4c03-b0fc-83f9ea98638a

  • Click VRLabs -> Custom Object Sync at the top of the screen.
  • Drag the object you want to sync into the Objects to Sync field.
  • Adjust the values until you're happy with them:
    • Add Local Debug View: Adds a toggle to view the object's remote position and rotation.
    • Quick Sync:
      • Position Precision: The position precision to be synced. Since this sync mode syncs floats, Position Precision also affects Range, and Rotation Precision is locked at 1 float per axis.
    • Non Quick Sync:
      • Position Precision: Precision of the synced object's Position.
      • Rotation Precision: Precision of the synced object's Rotation.
      • Radius: Radius of the sync. For more information, see Sync Type
      • Bits per Sync: Amount of bits per sync step. Lower bits means longer before the full object is synced, but also less parameter usage.
    • Enable Rotation Sync: Whether or not rotation should be Synced.
    • Sync Type: Whether or not the sync should be based on avatar root or on world origin.
      • Avatar Centered: The sync is based off of a point which is dropped when-ever you start the sync. This means you can use way lower range, but also it won't late sync.
        • This is forced for quick sync.
      • World Centered: The sync is based off of world origin. This means you'll need a big range to support big worlds, but it will late sync.
    • Add Damping Constraint to Object: Whether or not the remote object should be damped. This means the object moves to its new position smoothly whenever it receives a new position.
      • Damping value: How the damping behaves: 0 = don't move at all. 1 = move to the new position very fast.
  • Press Generate Custom Sync

Note

When building for Quest, you will have to remove unsupported components and shaders

How to use

  • Enable the CustomObjectSync/Enabled bool to start the sync.
  • Now the location of the Target objects will be synced over the network.

Performance stats

Rotation Sync:

Constraints:            11-13 + 3 per object 
Contact Receivers:      6
Contact Senders:        3
FX Animator Layers:     2 + 2 per object
Phys Bones:             6
Phys Bone Colliders:    3
Rigidbodies:            1
Joints:                 1
Expression Parameters:  1-256

No Rotation Sync:

Constraints:            11-13 + 3 per object 
Contact Receivers:      6
Contact Senders:        3
FX Animator Layers:     2 + 1 per object
Rigidbodies:            1
Joints:                 1
Expression Parameters:  1-256

Hierarchy layout

Rotation Sync:

Custom Object Sync
|-Target
|-Measure
|  |-Position
|  |  |-SenderX
|  |  |-SenderY
|  |  |-SenderZ
|  |  |-Receiver X+
|  |  |-Receiver X-
|  |  |-Receiver Y+
|  |  |-Receiver Y-
|  |  |-Receiver Z+
|  |  |-Receiver Z-
|  |-Rotation
|  |  |-Measure Bones
|  |  |  |-Measure X Magnitude
|  |  |  |-Measure X Sign
|  |  |  |-Measure Y Magnitude
|  |  |  |-Measure Y Sign
|  |  |  |-Measure Z Magnitude
|  |  |  |-Measure Z Sign
|  |  |-Measure Planes
|  |  |  |-X Angle Plane
|  |  |  |-Y Angle Plane
|  |  |  |-Z Angle Plane
|-Set
|  |-Result

No Rotation Sync:

Custom Object Sync
|-Target
|-Measure
|  |-Position
|  |  |-SenderX
|  |  |-SenderY
|  |  |-SenderZ
|  |  |-Receiver X+
|  |  |-Receiver X-
|  |  |-Receiver Y+
|  |  |-Receiver Y-
|  |  |-Receiver Z+
|  |  |-Receiver Z-
|-Set
|  |-Result

Contributors

License

Custom Object Sync is available as-is under MIT. For more information see LICENSE.