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.
Issue on implementing custom DSP algorithms with OnAudioFilterRead
I have encountered a problem related to Unity's DSP chain and Udon. I am planning to create an audio focused world, where I need to implement a custom DSP algorithm on audio that can respond to player behavior/controls in real-time. In the native Unity Mono framework, I can insert custom effects into the audio DSP chain by implementing the OnAudioFilterRead method in MonoBehaviour (see https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnAudioFilterRead.html ). In the UdonSharp documentation, I found that there is a method stub for OnAudioFilterRead in Unity events (see https://udonsharp.docs.vrchat.com/events/ ), so I should be able to implement it. However, it does not work in my Unity setup. I also saw a post on Canny mentioning that a component called OnAudioFilterReadProxy should be automatically added to the object if OnAudioFilterRead is implemented (See: https://vrchat.canny.io/udon/p/order-of-onaudiofilterreadproxy ), but this is not happening on my end. Any idea what could be going wrong with my script or configuration? Or it is a bug? My test code is like the following: using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; public class SimpleSineGenerator : UdonSharpBehaviour { [SerializeField, Range(0, 1)] private float amplitude = 0.5f; [SerializeField] private float frequency = 261.62f; private double phase = 0; private double sampleRate = 48000; public void Update() { // verify that the script is running transform.Rotate(Vector3.up, 90f * Time.deltaTime); } public void OnAudioFilterRead(float[] data, int channels) { // DSP code double phaseIncrement = 2 * Mathf.PI * frequency / sampleRate; for (int i = 0; i < data.Length; i += channels) { phase += phaseIncrement; if (phase > 2 * Mathf.PI) { phase -= 2 * Mathf.PI; } float value = amplitude * Mathf.Sin((float)phase); for (int j = 0; j < channels; j++) { data[i + j] = value; } } } }
1
·
Bug Reports
·
tracked
Udon Graph has unexpected behavior when a Branch is used in the Body of a For loop
SDK ver: 3.10.2 There seems to be certain conditions where the False output of a Branch does not update the value for the index of the loop properly, causing the loop to pass the incorrect value into "Get" nodes for arrays. This issue occurs in both ClientSim and in-game. I don't know if I fully narrowed it down, but I was assisting someone with Udon, and in the process encountered what appears to be a bug in the compiler. In my provided example, this graph should loop through an array of MeshRenderers, and then change the material depending on the value of the isToggled bool. see video in action: https://www.youtube.com/watch?v=VanIgAJRwoI The "True" side executes as expected, but when the Branch evaluates to "False", the loop executes the expected number of times, but it reuses the last value of the index instead of updating the index along with the loop. This makes is to the 4 cubes in the array change to red when isToggled is True, but when isToggled is false it sets the last cube in the array to blue 4 times in a row. Possibly the issue could be with the "MeshRenderer[] Get" node, as if its input "int" is not getting updated properly during the loop. As can also be seen in the video, for some odd reason, adding a "Debug Log" node with a "String Format" node that accesses the index prevents the unexpected execution from occurring. Curiously, it's specifically the "String Format" node that prevents the issue, as disconnecting it (but keeping the Debug Log) still has the issue occur.
1
·
Bug Reports
·
tracked
Load More