SDK Version: 3.10.3
When a
UdonSharpBehaviour
contains an SDK-proxied event method (such as
public void OnAudioFilterRead
) that isn't referenced externally elsewhere in the program, the UdonSharp compiler fails to export the symbol under the expected proxied event name. The entry point ends up exported as something like
__0_OnAudioFilterRead
(the internal/mangled name) instead of
_onAudioFilterRead
.
This causes the entry-point check inside
UdonBehaviour
to fail, so the event proxy is never registered and the user's method silently never fires.
Reference code path on the SDK side:
if (_program.EntryPoints.HasExportedSymbol("_onAudioFilterRead"))
{
RegisterEventProxy<OnAudioFilterReadProxy>();
}
Because
HasExportedSymbol("_onAudioFilterRead")
returns false,
RegisterEventProxy<OnAudioFilterReadProxy>()
is never called and the proxied event is never delivered.
Steps to reproduce:
  1. Create a
    UdonSharpBehaviour
    with
    public void OnAudioFilterRead(float[] data, int channels)
    .
  2. Don't reference the method from any other script, UI event, or
    SendCustomEvent
    call.
  3. Enter Play mode with an audio source that should drive the filter.
  4. Observe that
    OnAudioFilterRead
    is never invoked.
  5. Inspect the compiled program's exported symbols — the entry point is
    __0_OnAudioFilterRead
    instead of
    _onAudioFilterRead
    .
Note:
OnAudioFilterRead is also not available in udongraph

Photo Viewer

View photos in a modal