OntriggerEnter event gives a null reference if a player enters the collider
When using the On trigger enter event on an object with a collider, the "other" variable usually gives an instance collider of the object that entered that collider. This works for arbitrary scene objects, but fails when the object entering it is the player object, which will cause the udonVM to generate a null reference exception. down below a picture for a minimum graph setup that generates this error.
Interactive Objects break after being cloned/instanciated on live worlds.
Description: If an interactive object is cloned with VRCInstantiate, both the cloned object and the original object will lose interactivity. Reproduction: This can be reproduced by creating a 3d cube gameobject on layer 8/Interactive with a Udon script that has an Interact event in it. Then, in a separate gameobject, create a Udon script that uses VRCInstantiate on the gameobject (through public variables) after the Start event. In the images below, the graphs ordered by when they were mentioned. The graph in the first image should be set to a gameobject #1 and the one in the second image should be set to gameobject #2. Then, the variable should be set to gameobject #1. Gameobject #1 should be a 3D cube (this is not necessary), and #2 should be an Empty (again, not necessary). Other info: This error only occurs on live worlds. Local testing works as expected (both objects are interactable). This can create very confusing errors and broken worlds. Tested Version: VRCSDK3+UDON-2020.04.01.10.20.
Heap values are not initialized in some cases so GetProgramVariable() returns null when it shouldn't and SetProgramVariable() doesn't work
If you use GetProgramVariable on an UdonBehaviour immediately after it has been initialized via VRCInstantate.Instantiate, it will return null for valid variable names since the heap has not been initialized yet. In order for the heap to be valid you need to wait for the UdonBehaviour's first update for the variables to be valid. Another case where GetProgramVariable will fail is if the UdonBehaviour is disabled and has never been enabled. In a similar vein, if you set any heap variable via SetProgramVariable() before its heap has had a chance to initialize, SetProgramVariable will silently fail and any attempts to get the variable via GetProgramVariable() before initialization after setting it will return null. SendCustomEvent also fails in a similar way https://vrchat.canny.io/vrchat-udon-closed-alpha-bugs/p/sendcustomevent-fails-on-gameobjects-that-where-instantiated-in-the-same-functio It would be good if these functions (SetProgramVariable, GetProgramVariable, and SendCustomEvent, along with possibly SendCustomNetworkEvent) would force the UdonBehaviour to initialize itself if it hasn't already been initialized before they execute any logic. Right now it's unexpected behavior for people who instantiate game objects; I've seen a number of people run into issues with this already and need to work around it by delaying initializing the instantiated object by a frame which gets messy very quickly and requires them to register an Update function in cases where they may not need to otherwise or they need to move their initialization logic that depends on the initializer into the initializee which means they have a difficult time determining what behaviour instantiated them. It will probably also be confusing if people try to interact with a disabled component.
Rewired flow line disappears if adding new one and deleting old one
Repro video: https://twitter.com/candy_f_milk/status/1246308258781908992 Repro steps: 1. Prepare three nodes. (I'll call these X, Y, Z.) 2. Connect flow control X to Y. (I'll call it line1) 3. Connect X to Z. (I'll call it line2) 4. Delete the line1 5. Reload graph. Then line2 disappears. Environment: VRCSDK3+UDON-2020.04.03.13.19 If you reload after step 3, the line1 is already deleted. So I guess the line1 is already deleted internally on step 3. Step 4 deletes "phantom" line. Also step 4 deletes line2 as a side effect of incorrect operation. Workaround: Reload graph manually after connecting new line. Or delete old line before adding new one.
Comment needs space.
Can the "Comment" field be a bit...larger than 24 characters? (Yes you can type more than 24 characters but scrolling to read a comment makes me want to die.) Edit: Apparently the box scales up AFTER I begin to create a new variable (not choosing a variable that already exists, but creating a new one. I can't seem to get it to change any other way.)
Flow breaks with many jumping nodes
If there are about ten or more jumping nodes (Branch, For, and While), other jumping nodes, which are compiled after them, will never send Exit or False.
"UDON Alpha" watermark renders ontop of nodes after re-opening graph
Obligatory debug information: VRCSDK: VRCSDK3-2019.12.14.17.08 UdonSDK: UDONSDK-2019.12.14.16.56_Public Upon closing and re-opening the Udon Graph editor, the "VRChat UDON Alpha" watermark will start rendering ontop of all previously made nodes, this can be temporarily solved by selecting the nodes individually. Relatively inconsequential bug, but figured I'd make note of it.
UdonBehaviour array type is not defined
If you attempt to create an array of UdonBehaviours by naming the type VRCUdonUdonBehaviourArray, it does not get recognized as a valid Udon type and fails to assemble. The alternate special case type "VRCUdonCommonInterfacesIUdonEventReceiver" that's used in other places that takes the place of UdonBehavior doesn't have an array type of "VRCUdonCommonInterfacesIUdonEventReceiverArray" defined either. So at the moment we need to use arrays of Component to represent arrays of UdonBehaviours. This issue is probably related and seems like a workaround on the graph side or a bug that's hiding the issue: https://vrchat.canny.io/vrchat-udon-closed-alpha-bugs/p/udonbehaviour-variable-compiles-into-unityengineobjectarray-which-is-an-object
VRCPlayerApi get_AllPlayers is broken definetion
expect VRCPlayerApi get_AllPlayers return VRCPlayerApi instance. but define "List`1". UDON 2020.03.31.10.38 VRCSDK3 2020.04.03.13.11
SendCustomEvent fails on GameObjects that where Instantiated in the same function as the SendCustomEvent call
Tested in Editor Given the two below node graphs, each on there own gameobject in the scene (avoiding the issue regarding prefabs). The second larger behaviour has the ToClone variable set to the gameobject holding the other behaviour. What should happen is that the ToClone object is cloned and "TestCalled" followed by "CalledTest" should be logged Instead, the object is cloned, but only "CalledTest" is logged SDK3: 2020.02.28.16.27 UDON: 2020.02.28.21.02