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
[3.10.6] "Use All Tracking Keys" toggle may be unclickable, and the left half of field values may not respond to input
What happens Two related problems occur under certain conditions: 1) The "Use All Tracking Keys" checkbox works only at certain Inspector widths. 2) The left half of each field value does not respond to clicks when the Inspector is wide. See the attached image 1. Conditions This happens when the inspector of components placed below the VRCAvatarDescriptor assigns to EditorGUIUtility.labelWidth . This typically happens when a component has some multi-value fields (Vector, Rect, Quaternion and others) or fields with a custom PropertyDrawer or DecoratorDrawer since Unity internal code for them assigns that, but custom inspector code can also do it. In some cases, the issue does not occur even when these conditions are met, so there may be additional factors, such as Unity Editor internal timing or internal Inspector ordering. I have not been able to find reliable reproduction steps. It seems most likely to happen right after adding such a component to the Avatar Root, but I don't know whether this always reproduces it. Known components that meet this condition and are likely to be added to the Avatar Root: All AAO: Avatar Optimizer components (<=1.9.21) (PropertyDrawer) VQT Avatar Converter Settings (as of 3.0.3) (PropertyDrawer) MA Mesh Settings (as of 1.18.7) (multi-value field) Components that also meet this condition but are unlikely to be added to the Avatar Root: Unity Collider components (multi-value field) Workarounds a) Collapse inspector for components below VRCAvatarDescriptor. See the attached image 2. b) Move the VRCAvatarDescriptor component to the bottom of the component list. c) Click the horizontal position where checkboxes on other components are drawn, rather than the position where this checkbox is drawn. See the attached image 3. d) Component inspector developers can prevent this problem by setting EditorGUIUtility.labelWidth = 0; after drawing their component (example: [5]). Note that this does not work in PropertyDrawer s, because Unity's internal code sets EditorGUIUtility.labelWidth after your PropertyDrawer runs [4]. Cause VRCSDK 3.10.6 added AvatarDescriptorEditor3.CreateInspectorGUI , which simply wraps OnInspectorGUI in an IMGUIContainer , and this causes the problem. When Unity creates its own IMGUIContainer for an inspector, it uses a closure that does many things before and after calling OnInspectorGUI [1]. The most important of these are EditorGUIUtility.ResetGUIState(); [2] and EditorGUIUtility.hierarchyMode = true; [3]. The missing ResetGUIState() call causes the unclickable checkbox and the unresponsive left half of field values. Additional Notes VRCSDK 3.10.6 has problem that label area is narrower than that of other components. The cause of this problem is the missing hierarchyMode = true . [1] https://github.com/Unity-Technologies/UnityCsReference/blob/2022.3.22f1/Editor/Mono/UIElements/Inspector/InspectorElement.cs#L623 [2] https://github.com/Unity-Technologies/UnityCsReference/blob/2022.3.22f1/Editor/Mono/UIElements/Inspector/InspectorElement.cs#L659 [3] https://github.com/Unity-Technologies/UnityCsReference/blob/2022.3.22f1/Editor/Mono/UIElements/Inspector/InspectorElement.cs#L667 [4] https://github.com/Unity-Technologies/UnityCsReference/blob/2022.3.22f1/Editor/Mono/ScriptAttributeGUI/PropertyHandler.cs#L191 [5] https://github.com/anatawa12/AvatarOptimizer/pull/1816
1
·
Bug Report
·
tracked
[Contact Advanced Parameters] Allow Constant Contacts with the Collision Tags Advanced Parameters to return a combination of the tags of all contacting senders.
Issue: The current Advanced Parameters are set based on the sender with the closest proximity to the receiver. This makes sense for most of the advanced parameters but I would like to argue that Constant Contacts could benefit from being able to return a combination of matching tags from all currently contacting senders, not just the one with the closest proximity. Specifically, there are cases where you may have multiple senders in contact range you want to get the tags from but the limitation of only grabbing the tags from the closest sender forces you to continue to use multiple stacked receivers the old fashioned way. Usecase: In the attached screenshot is an example of where this could be useful. Multiple Receivers are needed in order to detect multiple contacts within range. i.e. all the fingers and hand contacts on a hand. A single Advanced Parameter Reciever would only detect and return the tags one of the 6 contacts on a hand. Another usecase I've seen in the past was a Contact based PVP system where each damage zone needed an additional receiver for each damage type. Multiple damage sources could be affecting a damage zone at a time so the new Advanced Parameters would also fail here as again they would only prioritize the closest sender. Hypothetical Usecase. Say a user has a sword that can switch elements. They have a SharpWeapon contact that is always active cause it is a sword, but also have fire, water, etc. contacts that they toggle on/off as they switch elements. A receiver with the Collision Tags Advanced Parameter currently will likely only return either the SharpWeapon or the Element contact but not both. (In this case it be solved by including the SharpWeapon tag on each of the element tags but the underlying problem still remains)
0
·
Feature Request
Add a "clock" parameter (flip/flop bool) for parameter sync interval
Context: Parameter multiplexing systems have become widely used to support an ever-increasing number of features on avatars, and to make room for more than a handful of options once the VRCFT template was added. These systems have depended on the fairly consistent update rate of 10 times a second (0.1s interval) and so have been built with that documented behavior. Recent changes to how parameters are synced have made these systems less consistent, it was stated that these systems were never supported (despite the docs and consistent in-game behavior for years) but efforts are being made to not break these systems. I suggested versioning the Expression Parameters (just like physbones/raycast) so that new features (like bit width, signed/unsigned, etc) would only apply on new uploads, and that expression parameters "1.0" would sync as they have before, in my opinion that's still the best approach (guarantees that existing uploads would remain functional), that was unfortunately shut down "There will not be a compatibility shim, as we are making these changes to guarantee server stability and cost." -@pi . Regardless of expression parameter versioning or not, the multiplexing systems are unlikely to be going anywhere since many modern avatars often use 400-600 bits for their base features (VRCFT aside), and so we'd be encountering the same inconsistent interval issues (be it on all uploads, or only on "1.1" uploads if versioning is accepted as a solution) since the local avatar cannot tell when parameters are sent to remote, as our 0.1s interval no longer holds true, and for the lack of a better timing mechanism. So a parameter update clock is needed, for example ParameterUpdate as a bool, that simply flip/flops it's state once current parameter values are sent to remote users, the interval should be dictated by the "fastest" update a remote user sees (if one user is very close and should see the update in 0.1 seconds and another is very far and only receives an update in 1 sec intervals, it should be based on the closer user's 0.1 interval) as that's been what we've been operating on, though I would not oppose additional options like ParameterUpdateLast for the latest update and ParameterUpdateMedian for when most people would see the updated values. This clock could also be used to drive a local cue for a user for certain features, specially ones that require syncing with remote users, like world drops, by displaying an effect locally when the world drop should be active for nearby/most/all remote users, meaning that moving would not cause it to be misaligned.
0
·
Feature Request
[Bug] VRC Avatar Desc.'s Colliders do not copy and paste transform references correctly.
When copying and pasting a whole VRC Avatar Descriptor component to a different avatar, the colliders transform references (hands, fingers, torso, feet, head) do not update to reference the new avatar's transforms for Custom-set colliders. I had an issue where I wanted to quickly transfer all the NativeFT work I did to another one of my avatars in a different outfit. So I copied and pasted the updated VRC Avi Desc. from the finished avatar to another avatar. Uploaded that new avatar, and found out I couldn't interact with any PhysBones. Found out it was because the colliders failed to copy over the correct transform references as expected when I copied and pasted the descriptor. If a collider is set to Custom, the internal transform reference to where that collider is supposed to be, maintains the previous avatar transform's reference instead of the new avatar's respective transform. If the collider is set to Automatic, the copy and pasting works just fine. This happens to both VRC Avi Desc components being copied and pasted as a new component, or pasting values into a pre-existing component. Steps to recreate: Create an avatar that uses at least one VRC Avatar Descriptor collider set to Custom. Copy the VRC Avatar Descriptor component off that avatar. Paste that VRC Avatar Descriptor component to a new avatar. Move the new avatar to observe that the Custom collider does not follow the new avatar, only the old copied-from, avatar. See included video where, in a fresh project with no extra plug-ins (other than VRC Light Volume's), I copy and paste a VRC Avatar Descriptor component onto a fresh new avatar. But, when I select and move that new avatar, the colliders set to Custom (head, hands, feet, fingers) are stuck to the old avatar. The Torso collider was set to Automatic, and correctly follows my avatar after being copied over. It might just require updating each ColliderConfig 's transform by calling Animator.GetBoneTransform(<insert correct humanoid bone>) , on the descriptor's OnValidate() or Reset() or whatever better method there is to detect copying and pasting. (Though this might break collider stealing features of Modular Avatar or Dark's Avatar Optimizer... maybe not, idk)
1
·
Bug Report
·
tracked
Load More
→