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.
Cameras and personal mirror broken in worlds with custom Clear Flags on main camera
My world has a layered camera setup and requires for the reference (main) camera of the world to be set to render with Clear Flags set to Depth only and only render from players eyes up to 1000 meters in order to maximize performance. Secondary camera of the world is set to render only a low quality copy of the terrain and surrounding mountains in the horizon from 1000 meters all the way up to 4000 meters before the main camera of the world renders the scene. Despite the player's POV looking perfectly normal on desktop and in VR, the in-game camera, steadycam and personal mirror all break because they inherit all applicable properties of the reference camera and don't properly clear the render, resulting in unacceptable ghosting in the sky. I'm asking for the VRCSDK to include an option to set the camera properties of VRChat's in-game user cameras independently from the reference camera, e.g. fields for Clear Flags, Near Clip, Far Clip on the VRCSceneDescriptor so they can still keep functioning without the world author having to provide a completely custom camera solution from the ground up in order to mitigate this issue. If exposing the properties in the SDK is too big of an ask, at least ensure that the in-game cameras do not have their Clear Flags set to Depth Only or Don't Clear. Thank you. P.S. This issue could also be fixed by allowing the world to set the Clear Flags of the player's main camera during runtime with Udon, related post: https://feedback.vrchat.com/udon/p/give-us-an-interface-to-the-main-camera-via-the-vrcgraphics-class
0
·
Bug Reports
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 DŽDžDžDŽDžDžDŽDžDŽDŽDžDŽDžDžDŽDŽDŽDžDžDŽDžDžDžDžDžDžDŽDŽDžDžDžDŽDžDžDžDŽDžDžDŽDžDŽDžDŽDŽDžDžDž.DŽDžDŽDžDŽDŽDŽDžDžDžDžDžDžDžDžDžDŽDžDžDžDžDŽDŽDŽDžDŽDžDŽDŽDžDžDžDŽDžDžDžDŽDŽDžDŽDŽDžDŽDŽDžDŽDŽ (System.Int32 DžDžDžDŽDŽDžDžDŽDžDžDžDŽDŽDžDŽDžDŽDŽDŽDžDžDŽDŽDŽDžDžDžDžDžDžDŽDŽDŽDžDŽDŽDžDŽDžDŽDžDžDŽDžDŽDžDŽ, System.Int32 DŽDŽDžDŽDŽDžDžDŽDžDŽDžDŽDžDŽDžDŽDŽDžDžDŽDžDŽDŽDŽDžDžDžDŽDŽDžDžDŽDŽDŽDžDŽDŽDŽDŽDŽDžDžDŽDŽDŽDžDž) [0x00000] in <00000000000000000000000000000000>:0 at VRC.Networking.UdonSync.DŽDŽDžDŽDŽDžDžDžDŽDžDŽDŽDžDžDžDžDžDŽDžDžDŽDŽDŽDŽDžDžDŽDŽDŽDžDžDŽDžDŽDžDžDžDŽDŽDžDžDžDŽDžDŽDŽDž (DžDŽDŽDŽDžDŽDŽDŽDŽDŽDŽDŽDŽDŽDžDŽDžDžDžDžDžDžDžDžDžDŽDŽDžDžDžDžDžDžDŽDŽDŽDžDžDžDŽDžDžDŽDžDžDžDŽ DŽDŽDžDžDŽDžDŽDžDžDŽDŽDŽDŽDŽDŽDŽDžDžDŽDŽDŽDŽDžDžDžDžDžDžDŽDŽDžDŽDŽDŽDžDŽDŽDŽDžDžDŽDžDžDŽDžDŽDŽ, System.Int32 DŽDžDžDŽDžDŽDŽDŽDžDžDžDžDŽDžDžDŽDžDžDŽDžDŽDŽDŽDŽDžDžDŽDŽDŽDŽDŽDžDžDŽDŽDŽDžDžDžDŽDžDŽDŽDŽDŽDžDž, System.Type DžDŽDŽDŽDŽDŽDŽDŽDžDžDžDžDžDŽDžDžDžDŽDŽDŽDŽDžDžDžDŽDžDžDžDžDŽDžDžDžDŽDžDŽDžDŽDŽDžDžDžDŽDŽDŽDŽDž) [0x00000] in <00000000000000000000000000000000>:0 at VRC.Networking.UdonSync.DžDŽDŽDžDŽDŽDžDŽDžDžDŽDžDŽDŽDŽDŽDžDŽDžDžDŽDžDžDžDžDžDžDžDŽDžDžDžDžDŽDžDŽDžDŽDŽDžDŽDŽDŽDžDžDŽDŽ (DžDžDŽDžDžDžDžDŽDŽDŽDŽDŽDŽDžDžDŽDŽDžDŽDŽDŽDŽDžDžDžDŽDžDžDŽDžDŽDžDŽDŽDžDžDŽDžDŽDžDŽDžDžDŽDžDžDŽ DŽDŽDžDžDžDŽDŽDžDžDžDŽDŽDžDŽDŽDŽDŽDžDžDŽDžDžDžDŽDŽDŽDŽDŽDŽDžDŽDžDŽDžDžDŽDŽDŽDžDŽDŽDŽDŽDŽDŽDŽDŽ, System.Int32 DžDŽDŽDŽDŽDŽDŽDžDŽDžDžDŽDžDžDŽDŽDŽDžDŽDŽDžDžDžDžDžDŽDžDŽDžDŽDŽDžDžDžDžDŽDŽDŽDžDŽDžDŽDžDŽDŽDŽDž, System.Single DžDžDŽDžDŽDžDŽDžDŽDŽDžDŽDŽDžDžDŽDŽDžDŽDŽDŽDŽDŽDŽDžDŽDŽDžDŽDžDŽDŽDžDžDžDžDŽDžDŽDŽDŽDžDŽDŽDŽDŽDž) [0x00000] in <00000000000000000000000000000000>:0 at VRC.Networking.FlatBufferNetworkSerializer.DŽDžDŽDŽDžDžDžDžDŽDžDŽDŽDŽDŽDŽDžDžDŽDžDžDžDŽDŽDžDžDŽDŽDŽDŽDŽDŽDžDŽDŽDžDŽDŽDžDžDžDŽDŽDžDŽDžDŽDž (ExitGames.Client.Photon.EventData DŽDŽDŽDžDŽDŽDžDŽDžDžDžDŽDžDžDŽDžDžDžDžDŽDŽDžDŽDŽDŽDŽDŽDŽDžDžDŽDžDŽDžDžDžDžDžDžDžDŽDžDžDžDžDžDž) [0x00000] in <00000000000000000000000000000000>:0 at NetworkManager.DŽDžDŽDŽDžDžDžDžDŽDžDŽDŽDŽDŽDŽDžDžDŽDžDžDžDŽDŽDžDžDŽDŽDŽDŽDŽDŽDžDŽDŽDžDŽDŽDžDžDžDŽDŽDžDŽDžDŽDž (ExitGames.Client.Photon.EventData DŽDŽDŽDžDŽDŽDžDŽDžDžDžDŽDžDžDŽDžDžDžDžDŽDŽDžDŽDŽDŽDŽDŽDŽDžDžDŽDžDŽDžDžDžDžDžDžDžDŽDžDžDžDžDžDž) [0x00000] in <00000000000000000000000000000000>:0 at UnityEngine.AudioClip+PCMReaderCallback.Invoke (System.Single[] data) [0x00000] in <00000000000000000000000000000000>:0 at DŽDŽDžDžDžDžDžDžDžDžDžDžDŽDžDžDŽDžDŽDžDŽDŽDŽDžDžDžDŽDŽDŽDŽDŽDŽDŽDžDŽDžDžDžDžDžDžDŽDžDžDžDžDŽDž.OnEvent (ExitGames.Client.Photon.EventData DŽDŽDŽDžDŽDŽDžDŽDžDžDžDŽDžDžDŽDžDžDžDžDŽDŽDžDŽDŽDŽDŽDŽDŽDžDžDŽDžDŽDžDžDžDžDžDžDžDŽDžDžDžDžDžDž) [0x00000] in <00000000000000000000000000000000>:0 at DŽDžDžDŽDŽDŽDŽDžDŽDŽDžDŽDžDŽDžDŽDŽDžDŽDžDŽDžDžDŽDŽDžDžDŽDŽDŽDŽDŽDŽDžDžDžDŽDžDŽDžDŽDŽDŽDžDŽDžDŽ.OnEvent (ExitGames.Client.Photon.EventData DŽDŽDŽDžDŽDŽDžDŽDžDžDžDŽDžDžDŽDžDžDžDžDŽDŽDžDŽDŽDŽDŽDŽDŽDžDžDŽDžDŽDžDžDžDžDžDžDžDŽDžDžDžDžDžDž) [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 DŽDŽDŽDžDžDžDŽDžDžDŽDŽDŽDžDžDŽDžDŽDŽDŽDžDžDžDŽDŽDžDŽDŽDžDŽDŽDŽDžDŽDŽDŽDžDŽDžDžDžDŽDžDŽDŽDžDŽDŽ.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?
10
·
Bug Reports
·
tracked
null-check on gameObject will throw exception if the gameObj is Destroyed
We cannot check whether a GameObject is destroyed or not. To detect an GameObject is destroyed or not, we normally may use (gameObj != null) or (gameObj != null && gameObj.name != "ToDestroy" ) or ReferenceEquals(gameObj , null) Those codes work perfectly in udonSDK3 unity editor environment. However, the same code will throw exception in-game which cause the script stop running. To investigate, we tried to enable UdonSecureHeap in editor and the editor also throw errors, so we guess that Udon's secure heap is what breaking the in-game behavior. The exception message say 'Your script should either check if it is null or you should not destroy the object.' However what I am doing is actually the null-checking!! The following is the error log. I am destroying a 'Cube' and check the cube's status using 'Tester' by showing the result on UnityEngine.UI.Text, which shows "Object is NOT null" or "Object is null" : [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 'UnityEngineObject.__op_Equality__UnityEngineObject_UnityEngineObject__SystemBoolean'. Parameter Addresses: 0x0000000B, 0x00000004, 0x0000000A The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. ---------------------- Program Counter was at: 92 ---------------------- Stack Dump: ---------------------- Heap Dump: 0x00000000: 6459115532197657758 0x00000001: Tester 0x00000002: null 0x00000003: Text (UnityEngine.UI.Text) 0x00000004: null 0x00000005: null 0x00000006: Object is null 0x00000007: Object is NOT null [ 0x00000008: ] 0x00000009: 4294967295 0x0000000A: False 0x0000000B: null 0x0000000C: 241 0x0000000D: Cube (UnityEngine.GameObject) 0x0000000E: Object is NOT null [Cube (UnityEngine.GameObject) 0x0000000F: Object is NOT null [Cube (UnityEngine.GameObject) 0x00000010: Object is NOT null [Cube (UnityEngine.GameObject)] 0x00000011: Object is NOT null [Cube (UnityEngine.GameObject)] 0x00000012: 241 0x00000013: Object is NOT null [Cube (UnityEngine.GameObject)]241 0x00000014: 4294967295 0x00000015: UnityEngineObject.__op_Equality__UnityEngineObject_UnityEngineObject__SystemBoolean 0x00000016: UnityEngineTime.__get_frameCount__SystemInt32 0x00000017: SystemInt32.__ToString__SystemString 0x00000018: SystemString.__op_Addition__SystemString_SystemString__SystemString 0x00000019: UnityEngineUIText.__set_text__SystemString__SystemVoid 0x0000001A: UnityEngineGameObject.__ToString__SystemString ---------------------- Inner Exception: ---> VRC.Udon.VM.UdonVMException: An exception occurred during EXTERN to 'UnityEngineObject.__op_Equality__UnityEngineObject_UnityEngineObject__SystemBoolean'. Parameter Addresses: 0x0000000B, 0x00000004, 0x0000000A ---> UnityEngine.MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. at (wrapper managed-to-native) UnityEngine.GameObject.get_transform(UnityEngine.GameObject) at VRC.Udon.Security .UnityEngineObjectSecurityBlacklist.IsBlacklisted[T] (T objectToCheck) [0x0008c] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\Security\Source\UnityEngineObjectSecurityBlacklist.cs:50 at VRC.Udon.ClientBindings.UdonClientInterface.IsBlacklisted[T] (T objectToCheck) [0x00000] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\ClientBindings\Source\UdonClientInterface.cs:83 at VRC.Udon.UdonManager.IsBlacklisted[T] (T objectToCheck) [0x00001] in E:\Unity Project 2018\Test2018World\Assets\Udon\UdonManager.cs:137 at VRC.Udon.Security .UdonSecureHeap.ScanHeapValue[T] (T& heapValue) [0x0005f] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\Security\Source\UdonSecureHeap.cs:142 at VRC.Udon.Security .UdonSecureHeap.GetHeapVariable[T] (System.UInt32 address) [0x0000d] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\Security\Source\UdonSecureHeap.cs:55 at VRC.Udon.Wrapper.Modules.ExternUnityEngineObject.__op_Equality__UnityEngineObject_UnityEngineObject__SystemBoolean (VRC.Udon.Common.Interfaces.IUdonHeap heap, System.UInt32[] parameterAddresses) [0x00000] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\Wrapper\Source\Modules\UnityEngine\ExternUnityEngineObject.cs:89 at VRC.Udon.VM.UdonVM.Interpret () [0x00272] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\VM\Source\UdonVM.cs:281 --- End of inner exception stack trace --- at VRC.Udon.VM.UdonVM.Interpret () [0x00326] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\VM\Source\UdonVM.cs:305 --- End of inner exception stack trace --- at VRC.Udon.VM.UdonVM.Interpret () [0x003f4] in C:\VRChatGit\VRChat-Udon\UdonVM\Udon\VM\Source\UdonVM.cs:346 at VRC.Udon.UdonBehaviour.RunProgram (System.UInt32 entryPoint) [0x0006a] in E:\Unity Project 2018\Test2018World\Assets\Udon\UdonBehaviour.cs:1867 UnityEngine.Debug:LogError(Object, Object) VRC.Core.Logger:LogError(String, Int32, Object) VRC.Udon.UdonBehaviour:RunProgram(UInt32) (at Assets/Udon/UdonBehaviour.cs:1877) VRC.Udon.UdonBehaviour:Update() (at Assets/Udon/UdonBehaviour.cs:762)
7
·
Bug Reports
·
interested
SendCustomNetworkEvent does not work on an object named PlayerManager
If you name your GameObject PlayerManager , then execution of SendCustomNetworkEvent is blocked. This behavior newly started from build 944 or 946 without any notice. I made a world for reproduction: https://vrchat.com/home/world/wrld_f17d2b37-2f60-47d2-b280-e4489ba29368 --- I use identical Udon program for two GameObjects. You'll see logs for the failure case (named PlayerManager ) like this ("naqtn" is my user name): [Network Processing] RPC called PlayerManager:UdonSyncRunProgramAsRPC:All and 10 bytes [VRC_EventDispatcherRFC] SendRPC/AlwaysUnbuffered on PlayerManager blocked for naqtn (local master owner) --- On the other hand, the log success case (named Foo ) is like this: [Network Processing] RPC called Foo:UdonSyncRunProgramAsRPC:All and 10 bytes [VRC_EventDispatcherRFC] Will execute SendRPC/AlwaysUnbuffered on Foo (UnityEngine.GameObject) for naqtn: S: "UdonSyncRunProgramAsRPC" I: 0 F: 0 B: Unused (local master owner) [Network Processing] RPC invoked UdonSyncRunProgramAsRPC on Foo for naqtn [UdonSync] Foo executing echo at the behest of naqtn --- I guess "real" PlayerManager exists somewhere (perhaps in hidden player object) and the system wants to block malicious incoming messages. It might reach with adjusted network id. But I think blocking by the name is not reliable and is not good way to do that. Because VRC_EventDispatcherRFC must be able to get the object reference of real PlayerManager internally. I'm not sure this is a bug or intended feature. If this is a feature, please describe in the document and announce to Udon creators.
2
·
Bug Reports
Load More