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.
Add caching options for VRCImage/String/VideoDownloader components to skip request limits and lower network usage
Currently when a world loads, for example all VRCImageDownloader have to redownload their content, with a 5 second period between each. This both puts strain on hosts and also limits what we can do with worlds in a nice way since all non-bundled content has to be redownloaded every time. Not to mention it puts pressure on bandwidth for users. Ideally there should be a parameter on these functions to make a cached download request, at the very least for images/video, so it can be decided on a case-by-case basis (as this would of course not be desired for all cases where a URL is input by a user or is frequently changing on the source server.). If caching is enabled on the request and a local copy exists, you skip sending a request to the server and skip the 5-second cooldown on this downloader type, simply loading it from disk. This avoids the security concerns since no contact is made to the server. ----------------------------------------------------------- The cache could be stored as a sub-folder of a specific world, being shared across instances, which would make sense, and would make cleanup simple. But even more gains could be had from it being a global cache, so if I pasted the same URL in another world, it could instantly load it from my cache and any others who already have it cached, avoiding duplication of data. A simple dictionary file can be maintained and loaded on VRChat load to avoiding having to scan the cached files each time, as the amount of files could definitely grow pretty big. But a global cache like that isn't essential and would gladly give it up if it means implementing this request is more likely. Also, having an option to set the "TTL" (time to live) of the cached file would be a nice benefit too, though not an essential feature to have from the start. But would be pretty simple to add it as a saved property in the cache record data and compare it to the creation date and just do a redownload. (The local data should be encrypted using existing world encryption systems to prevent modifying the files and so there's no concern about illegal/awkward media ending up in a person's cache).
1
·
Feature Requests
An error occurs in ClientSim when a synced VRCUrl variable is null in a PlayerObject with Persistence enabled.
VRCSDK 3.7.5 Steps to Reproduce: Attach the VRC Enable Persistence component and VRC Player Object component to an object. Attach the following UdonSharp script to the same object. Execute Interact() in ClientSim. --- using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class VRCURLPersistenceTest : UdonSharpBehaviour { [UdonSynced] private VRCUrl testUrl; public override void Interact() { RequestSerialization(); } } --- Observed Error: When running the script in ClientSim, the following NullReferenceException occurs: --- NullReferenceException: Object reference not set to an instance of an object VRC.SDK3.ClientSim.Editor.VisualElements.Fields.FieldFactory.GenerateField[T] (System.String fieldName, T data) (at ./Packages/com.vrchat.worlds/Integrations/ClientSim/Editor/VisualElements/Fields/FieldFactory.cs:79) VRC.SDK3.ClientSim.Editor.VisualElements.EncodeDecodeEditors.ClientSimUdonEncodeDecodeEditor.GenerateFields (UnityEngine.MonoBehaviour component, VRC.SDK3.Data .DataDictionary data) (at ./Packages/com.vrchat.worlds/Integrations/ClientSim/Editor/VisualElements/EncodeDecodeEditors/ClientSimUdonEncodeDecodeEditor.cs:30) VRC.SDK3.ClientSim.Editor.VisualElements.ClientSimNetworkHolderInstanceElement.GenerateDataElements (System.Int32 index) (at ./Packages/com.vrchat.worlds/Integrations/ClientSim/Editor/VisualElements/ClientSimNetworkHolderInstanceElement.cs:72) VRC.SDK3.ClientSim.Editor.VisualElements.ClientSimNetworkHolderInstanceElement.UpdateData (VRC.SDK3.ClientSim.Editor.ClientSimPlayerObjectWindow+PlayerObjectData data) (at ./Packages/com.vrchat.worlds/Integrations/ClientSim/Editor/VisualElements/ClientSimNetworkHolderInstanceElement.cs:94) VRC.SDK3.ClientSim.Editor.ClientSimPlayerObjectWindow.UpdateCurrentPage (VRC.SDK3.ClientSim.ClientSimOnPlayerObjectUpdateEndedEvent e) (at ./Packages/com.vrchat.worlds/Integrations/ClientSim/Editor/Windows/ClientSimPlayerObjectWindow.cs:259) VRC.SDK3.ClientSim.ClientSimEventDispatcher.SendEvent[T] (T clientSimEvent) (at ./Packages/com.vrchat.worlds/Integrations/ClientSim/Runtime/Events/ClientSimEventDispatcher.cs:62) VRC.SDK3.ClientSim.Persistence.ClientSimPlayerObjectStorage.LateUpdate () (at ./Packages/com.vrchat.worlds/Integrations/ClientSim/Runtime/Player/PlayerPersistence/ClientSimPlayerObjectStorage.cs:172) --- Workaround: Setting an initial value for the synced VRCUrl variable prevents the error: --- [UdonSynced] private VRCUrl testUrl = VRCUrl.Empty; --- Possible Cause & Suggestion: It seems that ClientSim does not handle null values properly when processing synced variables. Adding proper null handling for synced variables, especially for VRCUrl, may help prevent this error.
1
·
Bug Reports
UdonSharpBehaviour throws ArgumentNullException during PrefabStage autosave when Unity pseudo-null object is serialized
Environment: Unity version: 2022.3.22f1 VRChat SDK Worlds: 3.10.3 VRChat SDK Base: 3.10.3 UdonSharp included with SDK Project uses Prefab Mode / PrefabStage with UdonSharpBehaviour components YamaPlayer package present: net.kwxxx.yama-stream 1.5.18 Observed: When opening or editing prefabs containing UdonSharpBehaviour components in Prefab Mode, Unity logs repeated ArgumentNullException errors from OdinSerializer UnitySerializationUtility. Error: ArgumentNullException: Value cannot be null. Parameter name: unityObject VRC.Udon.Serialization.OdinSerializer.UnitySerializationUtility.SerializeUnityObject(...) UdonSharp.UdonSharpBehaviour.UnityEngine.ISerializationCallbackReceiver.OnBeforeSerialize() and similarly: UnitySerializationUtility.DeserializeUnityObject(...) UdonSharp.UdonSharpBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize() Trigger: Open a prefab containing UdonSharpBehaviour in Prefab Mode Move a child object or let PrefabStage autosave run Errors repeat, sometimes dozens/hundreds per save Expected: PrefabStage autosave should not throw if a Unity pseudo-null UdonSharpBehaviour or serialized target is encountered. It should skip invalid objects or handle UnityEngine.Object pseudo-null safely. Additional finding: For diagnosis only, I temporarily tested a local guard around the SDK serialization path. The test indicated that the affected object was not a normal C# null reference, but behaved as null through Unity's overloaded UnityEngine.Object null comparison. With that guard in place, the exception stopped. I am not using this as a permanent workaround and do not intend to publish content with a modified SDK. This observation is included only to help identify the likely failure path. Additional observation: I have encountered this issue twice. In both cases, once the issue started occurring in the project, checking out older repository commits did not reliably make the issue disappear. This suggests that the trigger may involve Unity Library/cache/generated SDK state or some project-local serialized state, not only the currently checked out asset files.
2
·
Bug Reports
·
tracked
Load More