SDK Bug & Feature Requests

Please check out the following rules and use the provided template when posting a bug report! Off-topic posts will be deleted.http://bit.ly/vrchat-bug-reports
[SDK 3.8.1+] Excessive SDK console log spam due to undefined log category
In VRCSDK 3.8.1 and later several log invokations ( VRC.Core.Logger.Log() ) in internal SDK assemblies (e.g. VRCSDKBase-Editor.dll and VRCCore-Editor.dll ) as well as VRC.SDKBase.Editor.EnvConfig.cs do not define the log category anymore, resulting in excessive console logging with no real added value to the end user. In 3.7.5 and earlier SDKs with old logger, DebugLevel.All enum was passed as a parameter every time these messages would be logged, resulting in nothing being visible to the end user. From 3.7.6 up to 3.8.0 after SDK logger rewrite, "All" string was passed as a parameter due to the DebugLevel enum getting replaced by a generic category string parameter, still resulting in all messages being hidden. In previous versions of the SDK not a single log entry would appear in the editor's console unless something important was actually happening and the end user should be informed about it. In 3.8.1 many of the category parameters were mysteriously removed, resulting in 14 entries appearing in the console on every assembly reload (see attachments). The increased logging takes up third of the console window's footprint on every assembly reload and makes it very difficult to spot actually important log entries. Below I have listed the different messages originating from DLLs in the SDK with their stack traces. (The rest are primarily from VRC.Editor.EnvConfig:ConfigurePlayerSettings() located in the VRC.SDKBase.Editor assembly) Reloading Assemblies UnityEngine.Debug:Log (object,UnityEngine.Object) VRC.Core.Logger:Log (string,string,UnityEngine.Object) VRC.SDK3.Editor.EditorAssemblies:OnCompileScripts () No local config found at 'C:/Users/[REDACTED]/AppData/LocalLow/[REDACTED]/[REDACTED]\config.json' UnityEngine.Debug:Log (object,UnityEngine.Object) VRC.Core.Logger:Log (string,string,UnityEngine.Object) VRC.Core.LocalConfig:FetchConfig (System.Action,System.Action) VRC.Core.LocalConfig:.ctor (string,bool,bool) VRC.Core.ConfigManager:.cctor () VRC.Editor.EnvConfig:ConfigureSettings () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/EnvConfig.cs:125) VRC.Editor.EnvConfig:EditorUpdate () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/EnvConfig.cs:91) UnityEditor.EditorApplication:Internal_CallUpdateFunctions () No local config found at 'C:/Users/[REDACTED]/AppData/LocalLow/[REDACTED]/[REDACTED]\null' UnityEngine.Debug:Log (object,UnityEngine.Object) VRC.Core.Logger:Log (string,string,UnityEngine.Object) VRC.Core.LocalConfig:FetchConfig (System.Action,System.Action) VRC.Core.LocalConfig:.ctor (string,bool,bool) VRC.Core.ConfigManager:.cctor () VRC.Editor.EnvConfig:ConfigureSettings () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/EnvConfig.cs:125) VRC.Editor.EnvConfig:EditorUpdate () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/EnvConfig.cs:91) UnityEditor.EditorApplication:Internal_CallUpdateFunctions () FetchConfig UnityEngine.Debug:Log (object,UnityEngine.Object) VRC.Core.Logger:Log (string,string,UnityEngine.Object) VRC.Core.RemoteConfig:FetchConfig (System.Action,System.Action) VRC.Core.BaseConfig:Init (System.Action,System.Action,bool) VRC.Editor.EnvConfig:ConfigureSettings () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/EnvConfig.cs:128) VRC.Editor.EnvConfig:EditorUpdate () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/EnvConfig.cs:91) UnityEditor.EditorApplication:Internal_CallUpdateFunctions () finshed fetching and set config UnityEngine.Debug:Log (object,UnityEngine.Object) VRC.Core.Logger:Log (string,string,UnityEngine.Object) VRC.Core.RemoteConfig/<>c__DisplayClass1_0:<FetchConfig>b__0 (VRC.Core.ApiContainer) VRC.Core.APIResponseHandler/<HandleResponse>d__5:MoveNext () Cysharp.Threading.Tasks.CompilerServices.AsyncUniTaskVoid`1<VRC.Core.APIResponseHandler/<HandleResponse>d__5>:Run () (at ./Packages/com.vrchat.base/Runtime/VRCSDK/Plugins/UniTask/Runtime/CompilerServices/StateMachineRunner.cs:104) Cysharp.Threading.Tasks.Internal.ContinuationQueue:RunCore () (at ./Packages/com.vrchat.base/Runtime/VRCSDK/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs:194) Cysharp.Threading.Tasks.Internal.ContinuationQueue:Update () (at ./Packages/com.vrchat.base/Runtime/VRCSDK/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs:159) Cysharp.Threading.Tasks.Internal.ContinuationQueue:Run () (at ./Packages/com.vrchat.base/Runtime/VRCSDK/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs:118)
3
·
Bug Report
·
available in future release
Improve VRCPlayerAPI.GetPlayers()
Motivation In Udon Sharp, syntactically, the following is nonsensical: var players = new VRCPlayerApi[VRCPlayerApi.GetPlayerCount()]; VRCPlayerApi.GetPlayers(players); Why doesn't GetPlayers() just… return a preconstructed array of players in the instance already? Why do I need to first create an empty array? In Udon Sharp, at least, one can easy replace or initialize an array with something else like so: int[] arrayOfNumbers; void someFunction() { arrayOfNumbers = someClassInstance.AFunctionThatReturnsAnIntArray() } There is no need to preset the size of the array, as the actual array construction is handled by another function. But in the VRCSDK we are required to pass a prebuilt array to this function??? Make it make sense. Solutions One, Update UDON so GetPlayers() no longer requires passing in an empty VRCPlayerAPI[] sized to the number of players when compiled with a newer SDK; The UDON VM would support both the old and the new behavior. This would have the benefit of, at least in UDON Sharp, being syntactically valid, as the initialized VRCPlayerAPI[] would become effectively an optional variable. If passed, it would follow the current behavior. If not passed, the function will create an array sized to the current number of players currently in the instance automatically. Two, create a separate GetPlayerList() , which would return a VRCPlayerAPI[] of the appropriate size (which could then be stored as a variable), and deprecate GetPlayers(VRCPlayerAPI[] players) in favor of the new function. This would have the benefit of easier backwards compatibility and avoid changing default behavior of an existing function.
5
·
Feature Request
·
available in future release
Load More