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.
Expose UnityEngine.Keyframe properties and Keyframe[] Get/Set methods to Udon
https://docs.unity3d.com/2022.3/Documentation/ScriptReference/Keyframe.html Udon is extremely slow and many creators heavily rely on AnimationCurves to optimize their programs, allowing them to evaluate complex curves with very minimal performance impact instead of writing the mathematical equations manually, resulting in orders of magnitude more instructions in the UdonAssembly. AnimationCurve class has already been fully exposed to Udon (thank you!) and they can be constructed from a Keyframe array, but none of the Keyframe properties or the Keyframe[] Get/Set methods are exposed to Udon, something that is needed to actually manipulate the keyframes of an AnimationCurve . Allowing the modification of individual keyframes unlocks many use cases, such as adjusting a car engine's torque curve as a result of aftermarket modifications or adjusting input lookup tables to allow users to fine tune thumbstick input sensitivity to match their preferences, not only that, developing a complete director mode for worlds would become trivial, something that would allow users to create complex timelines for recording videos. There are some possible workarounds using AnimationCurve.AddKey(Single, Single) , but it is very inconvenient and severely limits more specific solutions where singular keyframes must be modified based on their original properties and we don't have a way of accessing the original time value of a keyframe before replacing it. I have attached images of several examples where AnimationCurves are being used and I would like to be able to modify the individual keyframes of.
0
Update the Video Player Allowlist with more options for world developers
We desperately need more options for hosting videos and audio for worlds. Hosting audio and video allows world creators to shrink the size of their world's download by offloading big tutorial videos, BGM, etc to a 3rd party hosting service. The existing allow list is comprised almost entirely of expensive, niche, streaming-only, or user unfriendly websites. To summarize the existing allowlist at https://creators.vrchat.com/worlds/udon/video-players/www-whitelist/ : Akamai CDN - Expensive and not user friendly. Facebook Video - This seemed good until the account I made for VRChat content got banned within 30 minutes for being a bot and requiring ID to continue. Google Video - Doesn't exist. Hasn't since 2009? Not sure how this is on the list. Hyperbeam - What even is this? Expensive either way. MixCloud - Audio files only. Free option super limited, then becomes expensive. NicoNico - Region locked. I was unable to view uploaded videos from the US. Soundcloud - Audio only. Limited free tier, then paid. Topaz Chat - Site doesn't exist anymore? Twitch.tv - No way to upload without just streaming it to an account and then clipping the VOD. VRCDN - Paid and pretty much just for live/DJs Vimeo - Doesn't play Audio in VRC worlds. Video Only. Youku - What even is this? Chinese netflix? YouTube - DMCA takedown if you scratch your butt vaguely to the tune of Happy Birthday. Discord CDN - Not documented, but allowed. The links expire after ~24-48 hours though. This has created a system where most worlds making any attempt to do anything more interesting than "chill world with youtube player" is forced to rely on untrusted URLs. I've heard no end of complaints from other world creators when asking around about this situation. Furthermore, even if you have Untrusted URLs allowed, they still get blocked in some public worlds. There are a plethora of other video hosting sites that would be useful for uploading to. To suggest a few: * https://drive.google.com/ * https://twitter.com/ || https://x.com/ * https://rumble.com/ * https://odysee.com/ * https://www.bitchute.com/ * https://www.tiktok.com/ * https://playeur.com/ * https://catbox.moe/ * https://kick.com/ (for streaming) It might also be useful to define what a "Trusted" domain actually is. My understanding was that the trusted system was implemented to prevent URLs in worlds from leaking IP addresses to world creators hosting their own videos. (One of the allow-listed URLs is a VR Chat community project though) If the goal is to only allow from heavily moderated platforms to prevent explicit material, nothing is stopping someone from uploading that content and posting a link before it is moderated. (The domains I linked are moderated as well at any rate)
0
Add OnUdonVMException event for receiving information about halted UdonBehaviours
Being able to receive direct callbacks about UdonBehaviour exceptions with the relevant information included telling us which behaviour has crashed and what the exception message was would help us inform the players in the world immediately that something has catastrophically failed and they should rejoin the world or create a new instance. Not only that, we could also format useful error messages for users to copy from an InputField to include in their bug report without having to look through thousands of lines of logs. When an exception occurs during Udon execution (the UdonBehaviour "crashes"), the component will get disabled and nothing in the Udon program will execute afterwards. As of now there is no way to access information within the world via Udon about what has happened apart from repeatedly checking the enabled state, which only tells us that something has gone wrong, but even then some programs utilize the enabled state by design for optimization and thus it becomes an extremely unreliable method of checking for halted UdonBehaviours. Large worlds in VRChat can easily have over a thousand UdonBehaviours and repeatedly checking their enabled state to make sure everything is running as intended is not optimal and in most cases the only problem is the rare edge cases where a client/SDK update results in a regression or a player uses an avatar with an unsupported/unstable configuration which affects the world's stability. ...Yes, you could just keep adding more null checks like you're normally supposed to, but Udon suffers from severe performance limitations and in large frameworks every microsecond counts and iterating through behaviours is not a suitable solution. Many players either never turn on their client logging for performance reasons or they don't even know about the existence of such, so not only would this help alleviate the process of handling user bug reports as they've already been clearly informed by the world about what has happened, it would also improve the general user experience as the features in the world don't just suddenly go unresponsive without any form of feedback. One of the most frustrating experiences as a world creator is seeing someone encounter an UdonVMException in the middle of an 80 player event, resulting in a central world feature becoming unusable, and nobody involved had their logging enabled due to performance reasons or they didn't know how to enable it. As a final note to clarify, I'm not asking for the implementation of C# exceptions into Udon, just an Udon callback informing about the VM encountering one. I'm completely okay with UdonBehaviours becoming permanently halted, but as VRChat is becoming more complex by the day with all of the new features, more opportunities for edge cases open up and being able to catch them in realtime without the end user having to even understand how to access logs on the platform would significantly improve not only the players' experience in worlds, but also the world creator's experience with creating content for the platform. I've also attached examples of error messages targeted at end users that I've implemented across my products at the additional cost of Udon performance as a result of continuous scanning to ensure that UdonBehaviours critical to world's operation are still enabled.
0
Load More