Owner information is not correctly synced to new players when there are many UdonBehaviour objects.
[Steps to reproduce] 1. Lay out many (about 50 or more) MonoBehaviour and VRC_Pickup objects in the scene. 2. Enter the world with 3 or more people. 3. All player pick up and move some objects. 4. Join a new player. 5. The coordinates of some objects are not synced correctly to the new player. [Cause] Maybe, ownership information is not correctly transmitted to new player. In the new player, owner of some objects will appear to be the master. But the owner is actually a different player. So the coordinates by the true owner send to be ignored, the new player will see the object appear to be stationary from its initial position. Also, if an object is picked up by the true owner of that one, SetOwner is not called. So new players will continue to recognize that the master is the owner. [Interim measures] Always the master keep to hold all ownership of objects.
Ownership temporarily breaks when joining a world as your "first" world on that session and the owner is not master
Test WorldID: wrld_e9c7f73c-1bc7-477c-a1b4-fb6ac4df264b This world currently only contains one UdonBehaviour which is an "Empty" Graph on a VRC_Pickup that has "Synchronize Position" checked. HOWEVER THIS BUG EFFECTS ALL WORLDS INCLUDING SDK2! Every player that joins the world via direct means* will see the master as the owner of the pickup, regardless of whether someone else has become owner, before they joined. *This can be either via launch parameters that you set to a specific instance that already contains players, or via the website features/join links. This seems to be what causes the issue. When joining the first world, it seems that the network cannot fully initialize something, causing ownership to break. To reproduce the problem join the instance with two clients and wait until they have fully loaded. Let the client who has joined last (non-master) pickup the cube. Then join the instance with a third client. Now the third client will see the master as the owner of the pickup, despite the first and second client seeing the second client as the owner. This will only update if either the first or third client pickup the cube, or if the third client rejoins the same instance. This shows what happens to the Pickup (I have removed the debugging canvas you can see in the video, however the problem still persists) https://imgur.com/a/tCuKIuk Similar/Related Canny: https://vrchat.canny.io/vrchat-udon-closed-alpha-bugs/p/owner-information-is-not-correctly-synced-to-new-players-when-there-are-many-udo
VRChat.exe crashes by integer divide by zero
"Op Division" of int node crashes VRChat.exe when the divisor is zero. However, when running in Unity editor it only stops the UdonBehaviour with appropriate error message. --- The head of crash report error.log (local testing and published world case) VRChat by VRChat [version: Unity 2018.4.20f1_008688490035] GameAssembly.dll caused an Integer Divide by Zero (0xc0000094) in module GameAssembly.dll at 0033:2102cb7d. -- The message appears in Unity editor console (running in Unity editor case) [UdonBehaviour] An exception occurred during Udon execution, this UdonBehaviour will be halted. VRC.Udon.VM.UdonVMException: The VM encountered an error! Exception Message: An exception occurred during EXTERN to 'SystemInt32.__op_Division__SystemInt32_SystemInt32__SystemInt32'. Parameter Addresses: 0x00000001, 0x00000002, 0x00000000 Attempted to divide by zero.
Start event should be fired before processing CustomEvent and SendCustomNetworkEvent
`CustomEvent` could be fired by other UdonBehaviour before `Start` is fired. So, Udon programmer who implements this CustomEvent must check already initialized or not before CustomEvent body (and do initialize if needed). It's inconvenient and waste of time (in the meaning of both run-time and writing-time of users). I prefer to do Start before CustomEvent if it's not done yet. All of the above is same for SendCustomNetworkEvent case. (This might be a "feature request" but I chose "bug report" section because I guess this is not intended implementation.) SDK Version: VRCSDK3-UDON-2020.05.12.10.33 --- Details In UdonBehaviour.cs, Udon `Start` event is fired in C# `Update` methods. Events other than SendCustomEvent and SendCustomNetworkEvent have `if(!_hasDoneStart)` check at the beginning. So it is guaranteed that Start is fired before these events in Udon program. On the other hand, SendCustomEvent does RunProgram without `_hasDoneStart` guard. My request is inserting same thing, that C# Update method does, into SendCustomEvent. `if(!_hasDoneStart)... RunProgram(startPoint) ...`
Synced strings over a certain length will cause an ArgumentOutOfRangeException
- Name of the VRCSDK package you have imported. VRCSDK3-2020.03.21.12.04 - Name of the Udon SDK package you have imported. UDONSDK-2020.03.21.12.24 - Version/build of VRChat you’re using to test, if necessary. Latest open beta. (906) - A general description of the bug you’re encountering. Attempting to send a long string, like "Trip,Bond,Diamond,Cap,Copper,Canada,Ray,Circle,Centaur,Deck,Dwarf,Wind,Arm,Seal,Pipe,Pyramid,Nail,Amazon,Queen,Theater,Screen,Jupiter,Dress,Game,Whale," over the network via synced vars will return the following error: 2020.03.21 21:33:39 Error - [FlatBufferNetworkSerializer] Caught ArgumentOutOfRangeException: Non-negative number required. Parameter name: count at System.Text.UTF8Encoding.GetString (System.Byte bytes, System.Int32 index, System.Int32 count) [0x00000] in <00000000000000000000000000000000>:0 at ǄǅǅǄǅǅǄǅǄǄǅǄǅǅǄǄǄǅǅǄǅǅǅǅǅǅǄǄǅǅǅǄǅǅǅǄǅǅǄǅǄǅǄǄǅǅǅ.ǄǅǄǅǄǄǄǅǅǅǅǅǅǅǅǅǄǅǅǅǅǄǄǄǅǄǅǄǄǅǅǅǄǅǅǅǄǄǅǄǄǅǄǄǅǄǄ (System.Int32 ǅǅǅǄǄǅǅǄǅǅǅǄǄǅǄǅǄǄǄǅǅǄǄǄǅǅǅǅǅǅǄǄǄǅǄǄǅǄǅǄǅǅǄǅǄǅǄ, System.Int32 ǄǄǅǄǄǅǅǄǅǄǅǄǅǄǅǄǄǅǅǄǅǄǄǄǅǅǅǄǄǅǅǄǄǄǅǄǄǄǄǄǅǅǄǄǄǅǅ) [0x00000] in <00000000000000000000000000000000>:0 at VRC.Networking.UdonSync.ǄǄǅǄǄǅǅǅǄǅǄǄǅǅǅǅǅǄǅǅǄǄǄǄǅǅǄǄǄǅǅǄǅǄǅǅǅǄǄǅǅǅǄǅǄǄǅ (ǅǄǄǄǅǄǄǄǄǄǄǄǄǄǅǄǅǅǅǅǅǅǅǅǅǄǄǅǅǅǅǅǅǄǄǄǅǅǅǄǅǅǄǅǅǅǄ ǄǄǅǅǄǅǄǅǅǄǄǄǄǄǄǄǅǅǄǄǄǄǅǅǅǅǅǅǄǄǅǄǄǄǅǄǄǄǅǅǄǅǅǄǅǄǄ, System.Int32 ǄǅǅǄǅǄǄǄǅǅǅǅǄǅǅǄǅǅǄǅǄǄǄǄǅǅǄǄǄǄǄǅǅǄǄǄǅǅǅǄǅǄǄǄǄǅǅ, System.Type ǅǄǄǄǄǄǄǄǅǅǅǅǅǄǅǅǅǄǄǄǄǅǅǅǄǅǅǅǅǄǅǅǅǄǅǄǅǄǄǅǅǅǄǄǄǄǅ) [0x00000] in <00000000000000000000000000000000>:0 at VRC.Networking.UdonSync.ǅǄǄǅǄǄǅǄǅǅǄǅǄǄǄǄǅǄǅǅǄǅǅǅǅǅǅǅǄǅǅǅǅǄǅǄǅǄǄǅǄǄǄǅǅǄǄ (ǅǅǄǅǅǅǅǄǄǄǄǄǄǅǅǄǄǅǄǄǄǄǅǅǅǄǅǅǄǅǄǅǄǄǅǅǄǅǄǅǄǅǅǄǅǅǄ ǄǄǅǅǅǄǄǅǅǅǄǄǅǄǄǄǄǅǅǄǅǅǅǄǄǄǄǄǄǅǄǅǄǅǅǄǄǄǅǄǄǄǄǄǄǄǄ, System.Int32 ǅǄǄǄǄǄǄǅǄǅǅǄǅǅǄǄǄǅǄǄǅǅǅǅǅǄǅǄǅǄǄǅǅǅǅǄǄǄǅǄǅǄǅǄǄǄǅ, System.Single ǅǅǄǅǄǅǄǅǄǄǅǄǄǅǅǄǄǅǄǄǄǄǄǄǅǄǄǅǄǅǄǄǅǅǅǅǄǅǄǄǄǅǄǄǄǄǅ) [0x00000] in <00000000000000000000000000000000>:0 at VRC.Networking.FlatBufferNetworkSerializer.ǄǅǄǄǅǅǅǅǄǅǄǄǄǄǄǅǅǄǅǅǅǄǄǅǅǄǄǄǄǄǄǅǄǄǅǄǄǅǅǅǄǄǅǄǅǄǅ (ExitGames.Client.Photon.EventData ǄǄǄǅǄǄǅǄǅǅǅǄǅǅǄǅǅǅǅǄǄǅǄǄǄǄǄǄǅǅǄǅǄǅǅǅǅǅǅǅǄǅǅǅǅǅǅ) [0x00000] in <00000000000000000000000000000000>:0 at NetworkManager.ǄǅǄǄǅǅǅǅǄǅǄǄǄǄǄǅǅǄǅǅǅǄǄǅǅǄǄǄǄǄǄǅǄǄǅǄǄǅǅǅǄǄǅǄǅǄǅ (ExitGames.Client.Photon.EventData ǄǄǄǅǄǄǅǄǅǅǅǄǅǅǄǅǅǅǅǄǄǅǄǄǄǄǄǄǅǅǄǅǄǅǅǅǅǅǅǅǄǅǅǅǅǅǅ) [0x00000] in <00000000000000000000000000000000>:0 at UnityEngine.AudioClip+PCMReaderCallback.Invoke (System.Single data) [0x00000] in <00000000000000000000000000000000>:0 at ǄǄǅǅǅǅǅǅǅǅǅǅǄǅǅǄǅǄǅǄǄǄǅǅǅǄǄǄǄǄǄǄǅǄǅǅǅǅǅǅǄǅǅǅǅǄǅ.OnEvent (ExitGames.Client.Photon.EventData ǄǄǄǅǄǄǅǄǅǅǅǄǅǅǄǅǅǅǅǄǄǅǄǄǄǄǄǄǅǅǄǅǄǅǅǅǅǅǅǅǄǅǅǅǅǅǅ) [0x00000] in <00000000000000000000000000000000>:0 at ǄǅǅǄǄǄǄǅǄǄǅǄǅǄǅǄǄǅǄǅǄǅǅǄǄǅǅǄǄǄǄǄǄǅǅǅǄǅǄǅǄǄǄǅǄǅǄ.OnEvent (ExitGames.Client.Photon.EventData ǄǄǄǅǄǄǅǄǅǅǅǄǅǅǄǅǅǅǅǄǄǅǄǄǄǄǄǄǅǅǄǅǄǅǅǅǅǅǅǅǄǅǅǅǅǅǅ) [0x00000] in <00000000000000000000000000000000>:0 at ExitGames.Client.Photon.PeerBase.DeserializeMessageAndCallback (ExitGames.Client.Photon.StreamBuffer stream) [0x00000] in <00000000000000000000000000000000>:0 at ExitGames.Client.Photon.EnetPeer.DispatchIncomingCommands () [0x00000] in <00000000000000000000000000000000>:0 at ExitGames.Client.Photon.PhotonPeer.DispatchIncomingCommands () [0x00000] in <00000000000000000000000000000000>:0 at ǄǄǄǅǅǅǄǅǅǄǄǄǅǅǄǅǄǄǄǅǅǅǄǄǅǄǄǅǄǄǄǅǄǄǄǅǄǅǅǅǄǅǄǄǅǄǄ.DispatchIncomingCommands () [0x00000] in <00000000000000000000000000000000>:0 at Photon.Pun.PhotonHandler.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0 Sending a shorter string, like "Trip,Bond,Diamond,Cap,Copper," works without issue on the same world. - Step by step guide how to replicate the bug. Will get this if needed. --- This could just be a limitation of syncing strings - if there's a hardware limit, can we have an error letting us know that the string is too long to be sent?
Immobilize() doesn't fully immobilize player
When using Immobilize(), the whole point is that the player can't move anymore, e.g. so that users can type text on the keyboard without accidently moving when hitting WASD etc. Currently, only WASD is blocked correctly, but a lot of other movements are not blocked. Those are jumping, crouching, laying down. Please add those to the blocked movements so that players are not annoyed by accidental movement when they type text into an input field.
Event OnAnimatorIK not fired
Udon version 2020.04.30.18.46 UdonBehavior does not execute OnAnimatorIK(int layerIndex) if it is called from the uGUI Event. This may be due to the fact that the symbol string of the compiled Udon Assembly and the symbol recognized by Udon Behaviour are different. (1st image) Udon Assembly's Symbol (2nd image) Symbol recognized by UdonBehaviour(UdonBehaviour.cs, line 279) It should correctly be "_onAnimatorIK" with a capital K at the end ( https://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.OnAnimatorIK.html ).
Udon scans all assets on play, causing long 'play' times even in blank scene
Same as the title, projects with SDK3 imported do something (scan/reimport?) with the entire project that makes load times scale with the number of assets in your project. Having a project with just a few asset packs can cause a huge delay in loading when you try to play a project, even on a completely blank scene. Removing SDK3 fixes this issue.
Player Audio Override not working
In SDK3, the player audio override component do not work. You enter the trigger area and no changes get applied to you. Test world: Long Range Gain 24 Far 200 Short Range Gain 1 Far 1 https://vrchat.com/home/launch?worldId=wrld_4ec91e61-d1f5-4e00-af79-0a7399eceee5&instanceId=47840 I would also hope that it will get put into Udon as a node. Posting this because we are using this on the Community Meetup and would like to switch the world over to using Udon, but without this component we cannot do it.
 Instantiated prefabs don't have Udon Behaviours when in VRC (Not editor)
(This is only an issue when ingame; In the editor, everything works as it should) When instantiating a prefab inside VRChat, udon behaviours are not placed into the world with the prefab itself. In this instance, the prefabs are selected from an array of gameobjects, and then spawned in. They reference prefabs in the project folder rather than inside the scene itself. https://streamable.com/9kz06