[1123] Udon Objects with Udon Children initialize late despite execution order overrides
tracked
orels1
To reproduce:
- Create a behaviour with ExecutionOrder -100000
- Create a child of it with another behaviour with no execution order overrides
- Create a behaviour with ExecutionOrder -100000 and NOchild objects as a control
- Create a new separate behaviour with ExecutionOrder +100000
- Add a log to Start() to keep track of it
Expected result:
- Behaviours with -100000 to log first
- Behaviours with no override to log second
- Behaviours with +100000 to log third
What actually happens:
- Behaviours with -100000 and NOchildren log first
- Behaviours with no override log second
- Behaviours with +100000 log third
- Behaviours with -100000 WITHchildren log fourth
This also creates another large issue
If you also try to disable those -100000 objects (with Default children) via the +100000 Start() method - the -100000 behaviour will enter a broken state where it will never initialize or receive any events no matter what.
You can toggle them on and off after - no methods will ever fire
I have created a test world that illustrates the above: https://vrchat.com/home/world/wrld_06ab5f32-ffbe-44dd-9930-b3b28074fcfd
Checking the logs when loading in - you'll see a bunch of objects logging OnEnable (the ones that report
withChild False
), and a bunch of Default objects which are children of other -100000 objects.Then they will all get disabled by the +100000 behaviour.
Clicking the sphere enables those -100000 parents, but they never log either Start() or OnEnable
Log In
Phasedragon
tracked
The previously mentioned fix made it to open beta but it had some knock-ons so it was rolled back.
At the very least, we are well aware of exactly what is causing this and it may be fixed in the future, but will have to be done very carefully because it involves one of the most fragile systems.
Phasedragon
in progress
This has been fixed and will be rolled out in the next update