Skip to content

Powerful utilities and classes to build complex systems for VRChat using UdonSharp.

License

Notifications You must be signed in to change notification settings

Guribo/UdonUtils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

50 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Udon Utils

Total downloads

Contains the base scripts/tools for TLP packages as well as prefabs and potentially helpful scripts for VRChat worlds.

Please note that there is no explicit documentation available. The code is changing less frequently now and relatively stableand where it made sense there is some documentation in the code.

Installation

  1. Install VRChat World SDK 3.6
  2. Install CyanPlayerObjectPool: https://cyanlaser.github.io/CyanPlayerObjectPool/
  3. Install TLP UdonUtils: https://guribo.github.io/TLP/

Setup

  1. Add TLP_Essentials prefab to your scene to get the core components
    1. TLPLogger - for logging anything TLP related
    2. WorldVersionCheck - Warns users if a player with a new world version joins
    3. TLPNetworkTime - Much more accurate VRC network time provider (sub-millisecond accuracy)

Versioning

This package is versioned using Semantic Version.

The used pattern MAJOR.MINOR.PATCH indicates:

  1. MAJOR version: incompatible API changes occurred
    • Implication: after updating backup, check and update your scenes/scripts as needed
  2. MINOR version: new functionality has been added in a backward compatible manner
    • Implication: after updating check and update your usages if needed
  3. PATCH version: backward compatible bug fixes were implemented
    • Implication: after updating remove potential workarounds you added

Changelog

All notable changes to this project will be documented in this file.

[8.2.0] - 2024-06-02

πŸš€ Features

  • Add state machine implementation with optionally synchronized transition timing

πŸ› Bug Fixes

  • (UtcTimeSource) Prevent usage of utc float time due to accuracy problems

[8.1.1] - 2024-05-27

πŸ› Bug Fixes

  • (NtpTime) Fix new master not maintaining current time offset when old master leaves

[8.1.0] - 2024-05-25

πŸš€ Features

  • (TlpAccurateSyncbehaviour) Use float instead of double for timestamp

πŸ› Bug Fixes

  • Move missed base files to TLP.UdonUtils.Runtime namespace

βš™οΈ Miscellaneous Tasks

  • Bump version

[8.0.0] - 2024-05-25

πŸš€ Features

  • Add Stopwatch TimeSource
  • (TimeSource) [breaking] Custom ntp servertime synchronization, move Runtime files to TLP.UdonUtils.Runtime namespace
  • Add quaternion compression utils

🚜 Refactor

  • Remove unused code

[7.0.0] - 2024-05-16

πŸš€ Features

  • [breaking] Upgrade logging, world version check, split/extend physics based prediction utils, increase accuracy of TLP network time to double, improved overall accuracy/robustness in low performance situations, added latency checker, various prefab and scene updates
  • Add GetInstance function to TlpNetworkTime, expose various variables, add basic usage documentation

βš™οΈ Miscellaneous Tasks

  • Update test scene

[6.1.2] - 2024-05-10

βš™οΈ Miscellaneous Tasks

  • Support com.vrchat.worlds 3.6.x and Unity 2022.3.22

[6.1.1] - 2024-05-03

πŸš€ Features

  • (Physics) Add PhysicsUtils class with function CalculateAccelerationAndVelocity from positions

πŸ› Bug Fixes

  • (DemoBlackListToggle) Add check for unset White-/Blacklist buttons

βš™οΈ Miscellaneous Tasks

  • Prevent creating new branches on Github

[6.0.0] - 2024-04-19

πŸš€ Features

  • (TlpNetworkTime) Add ExactError property and instant Drift compensation with DriftThreshold
  • (Sync) [breaking] Change network timestamp resolution from float to double

[5.3.0] - 2024-04-14

πŸš€ Features

  • (TlpNetworkTime) Add ExactError property

[5.2.4] - 2024-04-14

πŸ› Bug Fixes

  • (VrcNetworkTime) Ensure that there is a single point of truth throughout a given frame for VRChats network time

[5.2.3] - 2024-04-14

πŸ› Bug Fixes

  • (Build) Fix compiler errors caused by test utils

[5.2.2] - 2024-04-14

πŸ› Bug Fixes

  • (Logging) Fix logs not mentioning script name correctly

[5.2.1] - 2024-04-13

πŸ› Bug Fixes

  • Split get scene path functions and fix C## error in test utils

[5.2.0] - 2024-04-13

πŸš€ Features

  • (testing) Add base scripts for easy unit testing

[5.1.0] - 2024-04-11

πŸš€ Features

  • (Prefabs) Add ui prefabs and fonts

[5.0.0] - 2024-04-07

πŸš€ Features

  • (TlpAccurateSyncBehaviour) Extract Update methods into new child classes: TlpAccurateSyncBehaviourUpdate/TlpAccurateSyncBehaviourFixedUpdate
  • (TlpAccurateSyncBehaviour) [breaking] Remove getter for synced send time, make network state private

πŸ§ͺ Testing

  • (TlpAccurateSyncBehaviour) Verify update methods provide correct snapshot ages

βš™οΈ Miscellaneous Tasks

  • Bump version

[4.0.1] - 2024-04-07

πŸ› Bug Fixes

  • (SanityTest) Correct object name

[4.0.0] - 2024-04-07

πŸš€ Features

  • (TlpAccurateSyncBehaviour) Make Start() method virtual
  • (Sync) Make dependencies public
  • (UdonCommon) Add extension function to get path in the scene of a transform
  • (UdonCommon) Add extension function to get path in the scene of a component
  • (TlpBaseBehaviour) [breaking] Switch to TimeSources, change logging of time and deltas, add SetupAndValidate method and call it in Start(), fix scenes and delete obsolete ones
  • (TransformBacklog) Prevent adding of time values from the past, add boolean return value, add tests
  • (Testing) Added new example runtime test GameTime vs DeltaTime, restructured Testing folder

🚜 Refactor

  • (TlpAccurateSyncBehaviour) Add some descriptions

πŸ§ͺ Testing

  • (TimeBacklog) Ensure interpolatable check works
  • (TransformBacklog) Fix failure due to floating point accuracy
  • (TransformBacklog) Fix another floating point accuracy error

βš™οΈ Miscellaneous Tasks

  • Bump version

[3.0.0] - 2024-03-30

πŸš€ Features

  • [breaking] Add time sources
  • (TlpAccurateSyncBehaviour) Add setup checks to start
  • (TimeSource) Add DeltaTime getter, reformat codebase

βš™οΈ Miscellaneous Tasks

  • Append changelog to readme
  • Prepare release 3.0.0
  • Revert deletion of Testing folder
  • Bump version

[2.0.0] - 2023-11-16

πŸš€ Features

  • Add fallback position handling to tracking data tracker
  • Create Test Result UI
  • Create UI with overview
  • Update status visibility
  • Add test for eye height updates coming from master
  • Update
  • Improve error message by adding hint
  • Add prediction reduction
  • Create basic image downloader with automatic aspect ratio adjustment
  • Add new demo world for uvu (wip)
  • Prevent datalist access to invalid indices
  • Add lights and sfx to light, add more visuals, add toggle
  • Create slideshow with buttons
  • Update version

🚜 Refactor

  • Reorder, rename

πŸ“š Documentation

  • Add change notes to readme
  • Add versioning info"

πŸ§ͺ Testing

  • Add some missing method implementations

[1.1.1] - 2023-10-05

πŸš€ Features

  • Update version

πŸ› Bug Fixes

  • Namespace

[1.1.0] - 2023-10-05

πŸš€ Features

  • Update to represent fix update that removed EditorOnly from release on github
  • Move udon pool into utils
  • Remove no longer needed asmdef
  • Update version

[1.0.1] - 2023-10-03

πŸš€ Features

  • Use any tag
  • Remove old readme content, update exporter
  • Add legacy folder
  • Update asmdef after update to latest udonsharp version

[1.0.0] - 2023-09-13

πŸš€ Features

  • Update assets to lfs
  • Update serialization
  • Add SetOwner functionality
  • Fix stuttering at high speed
  • Change layers and make objects static that can be
  • Fix finding closest player
  • Damage indicator UI
  • Use distance check for player detection
  • Add kill confirmation
  • Start implementing leader boards
  • Start AVL tree
  • Continue implementing AVL tree
  • Fix most AVL issues
  • Improve comparer
  • Add UdonPool and usage
  • Fix build error, add executionorder to logger
  • Create basic leader board entry
  • Improve menu, add automatic scaling for content
  • Add UdonEvent
  • Add remove all listeners
  • Add basic audio to gun
  • Update logging
  • Update to U## 1.0 and client sim
  • Move logging to base class
  • Refactor player state to have base class PlayerStats
  • Moved
  • Fix loglevels, assert and perf limit warning
  • Fix entries with invalid names being added to leaderboard
  • Add vehicle sync, update leader board (break it too)
  • Initial (failed) version of better-tracking pickups
  • Jitterfree pickups
  • Make few functions static
  • Start creating composite weapons
  • Disallow multiple instances of same override in lists
  • Add gamemode, update vr components, test improvements, add serialization retry to base behaviour
  • Continue ai state machine
  • Give each damage target a unique id
  • Cleanup and add getTarget
  • Start implementing damage to targets
  • Update imported projects
  • Add loose files
  • Fix damage targets not receiving damage locally
  • Add logging of all logs in frame to profiler
  • Fix null error on player death
  • Create chair scripts
  • Add basic startup torque
  • Add execution order, fix runtime tests
  • Simplify comparison of behaviours
  • Fix scene setups
  • Update board (failing)
  • Create player entry from controller
  • Add indefinite patch
  • Fix leaving player not updating entry
  • Remove guribo references
  • Add start event to deserialization
  • Create events for ui
  • Reserialize
  • Convert recycling scroll view to udon
  • Add TLP_UNIT_TESTING define, add companion version of VRWorldToolkit
  • Change event handling and make it functionality of base class
  • Fix up scenes and broken event callbacks
  • Fix updates not being displayed
  • Display data in leaderboard entry
  • Use textmesh pro, add animation to leaderboard
  • Start adding feature for delayed event invokation
  • Implement delayed execution
  • Extract custom player stats into own class
  • Add integer utils
  • Add variations
  • Add mvc, test controller init/deinit
  • Create init for model
  • Test init of model and view
  • Enforce init order
  • Deinit controller
  • Test deinit of view
  • Add listening to model changes from view
  • Change editor, expose variables
  • Create vrcplayerapi extensions
  • Add new util
  • Start simplifying executionorder dependencies
  • Add more events for different executionorder sections, refactor executionorder on most scripts
  • Update qvpen to v3.2.5.1
  • Update tribes scene, create leaderboard prefab
  • Convert basic performance stats to model view controller
  • Update version of world on save now, requires 2 saves to go through though for now...
  • Add multiple sorting algorithms, update privacy zones example scene
  • Add dirty property to event
  • Create a factory for gameobjects
  • Create instantiating factory
  • Create factories for avl tree, factory with pool
  • Add leaderboard model
  • Add default categories
  • Reduce type spam in logs, add execution order to logs
  • Extend model to create avl trees for each category
  • Create default factories for scenes, update logging
  • Add data storing capability to LeaderModelEntryModel
  • Add comparer creation, update exectionorders, move pooleable code to base behaviour
  • Support adding players to model
  • Fix finding of inactive gameobjects
  • Add new data source using leaderboard model
  • Deinit on destroy, selectable categories with view
  • Add entries again, support ascending/descending sort direction (wip)
  • Start with sync of entries with new model
  • Fix category adding without custom categories
  • Raise change event on dirty in entry
  • Have entry synchronizer get notified when an entry changes
  • Have synchronizer attach entry to dirty root
  • Continue implementing new sync
  • Create statemachine for synchronizer
  • Continue working on sync (wip)
  • Support playmode test
  • Patch more vrc components for easier unit testing
  • Add missed vrc script to patcher, complete idle state testing
  • Remove Leaderboard, continue updating entrysynchronizer
  • Synchronization of single dirty entry
  • Convert syncing to use string
  • Update test controller and test template to test case with inheritance
  • Add max exec order, ensure tests don't respond after completion
  • Add tracking of jumps and movement distance
  • Made more utils static only
  • Removed old prefab
  • Create round robin sync
  • Update runtime folder structure
  • Add usagenote
  • Update UVU exporter and readme
  • Move some generic audio scripts here, add dummyview
  • Update
  • Remove vrc patcher
  • Change folder structure for vpm
  • Update dependencies
  • Rename and add udonutils dependency
  • Warn instead of error
  • Create synced event class
  • Raise on deserialization
  • Send the number of calls to the event since the last synchronization
  • Replace synchronize playerlist with new version
  • Fix missing asset
  • Update
  • Use inheritance, improve execution order
  • Add improved tracking scripts and first draft of a velocity provider
  • Add improved tracking scripts and first draft of a velocity provider
  • Test and improve rigidbody velocity provider
  • Create network time script that grabs a shared time for the current frame
  • Important update for smooth vehicle sync
  • Replace time.time
  • Extract accurate timing code into a parent class, add smooth error correction, add teleportation
  • Update assets
  • Update namespaces, update velocity provider
  • Add networktime assets
  • Create exporter
  • Add missing assets to exporter
  • Add support for collision detection during prediction
  • Create white/blacklist
  • Add whitelist mode and restricted usage
  • Add demo toggle script for adding local player to blacklist
  • Separate cyan dependency, update assets
  • Update assets
  • Fix some edge cases using unit testing
  • Add more tests, refactoring
  • Update model, add new ownership transfer function, add logs to base behaviour
  • Update chair, refactoring
  • Add gitconfig
  • Change tests to verify floating point issue
  • Fix relative velocity recording in velocity provider
  • Turn string loading error message into error
  • Revert severity
  • Improve compile symbols
  • Move development tools, update exporter
  • Fix/improve exporting and versioning

πŸ› Bug Fixes

  • Debug symbol
  • Lfs for assets
  • Remove all files to fix lfs issues
  • Add all files again to get rid of lfs issues
  • Setting references from editor script works again

🚜 Refactor

  • Cleanup and more test coverage
  • Remove unused code and cleanup
  • Improve contains checking
  • Make playerstats inherit from cyanpoolable
  • Fix naming
  • Use Tlpbasebehaviour
  • Fix roslyn warnings
  • Extract some duplicate code to base class
  • Cleanup model
  • Cleanup

πŸ“š Documentation

  • Update Readme
  • Fix file link

πŸ§ͺ Testing

  • Benchmark performance (ca. 0.4ms insertion time @ 100k elements)
  • Fix tests with debug enabled
  • Fix errors
  • Ensure logasserts are on by default
  • Show gameobjects in playtest
  • Fix failures caused by missing log expects
  • Update tests to use TestWithLogger, reduce log spam
  • Added more values and log
  • Initial setup and test of PlayerBlackList.cs
  • Continue testing for full coverage
  • Fix missing logger and test additional check
  • Fix player test

βš™οΈ Miscellaneous Tasks

  • Add release template
  • Add serialized programs
  • Remove programs
  • Update serialization

[0.0.3] - 2021-01-08

πŸš€ Features

  • Cleanup, refactoring
  • Add optional event listeners
  • Add master only activation support
  • Debug symbol toggle, cleanup
  • Add voice range far
  • Add transform recorder/player, add synced bool script that uses properties
  • Add lateBoneFollower, refactor: SyncedInteger uses Properties now
  • Add ToggleObject behaviour
  • Support disabling behaviours
  • Add synced string
  • World version check, various new scripts
  • Add more extensive path checking, replace Guribo with TLP
  • Improve error handling, add hashing of created package
  • Fix explorer opening at wrong position, update package.json

πŸ› Bug Fixes

  • Missing assembly reference

🚜 Refactor

  • Restructure content
  • Cleanup
  • Test and unity 2019

βš™οΈ Miscellaneous Tasks

  • Update
  • Add udonsharp as dependency

[0.0.4] - 2021-06-12

πŸš€ Features

  • Improved scene checking, added editor udonbehaviour extensions
  • Add test contoller template and gizmos
  • Prepare for UnU
  • Add test aborting
  • Add libraries, add networking behaviours

πŸ› Bug Fixes

  • Prevent detecting default values as null, fix build error

🚜 Refactor

  • Cleanup and add meta files

πŸ“š Documentation

  • Add documentation, refactoring

βš™οΈ Miscellaneous Tasks

  • Change file structure