Search Issue Tracker
By Design
Votes
0
Found in
2021.3.24f1
2022.2.18f1
2023.1.0b15
2023.2.0a13
Issue ID
UUM-34855
Regression
No
Accessing the raw value of a USS variable fails when using customStyle.TryGetValue()
Reproduction steps:
1. Open project “IN-39634”
2. Open “Assets\IN-39634_Assets\Scenes\SampleScene”
3. Enter Play Mode
4. Observe the Game view
Expected result: text in the label displays "500ms"
Actual result: text in the label displays "Error loading value"
Reproducible with: 2021.3.24f1, 2022.2.18f1, 2023.1.0b15, 2023.2.0a13
Couldn’t test with: 2020.3.48f1 (compiler errors)
Reproducible on: macOS Ventura 13.2.1 (Intel)
Notes:
- Also reproducible in Standalone Player
- The stylesheet is referenced through the runtime theme, but explicitly referencing the stylesheet through the UXML file makes no difference either
-
vallis_unity
May 04, 2023 07:58
Thanks for the reply. The stylesheet link vs theme link part is a bit of a red herring as I was trying it both ways in the repro to see if that made any difference to TryGetValue. There was no problem with the USS rule applying to the label, the issue was only with reading the value of the variable into code.
I've verified that doing the TryGetValue does indeed work in LateUpdate. Is there a better way to read the value of the USS variable into code? Firstly, it seems odd that a compile-time and project-wide constant fails to read at certain points within a frame. Secondly, it doesn't seem great to be grabbing the value as a string and then removing the "ms" part of the property. Is it possible to read the value using something like the TimeValue struct, which feels like it should be more appropriate for the value in question?
Many thanks!
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Trail Renderer visual doesn't match the positions of vertices when they have been offset
- [Mobile] The Material is not visible when using the Decal Renderer Feature
- Uncaught TypeError: Cannot read properties of undefined is thrown when the tab is inactive for several minutes
- Crash on mono_array_length when building a project
- "StackOverflowException" error when changing spline curve type from "Bezier" to "Auto" in the "Element Inspector"
Resolution Note:
There was a first problem in the tss file as the reference to the stylesheet was missing. I fixed that using a drag and drop of the stylesheet and applying the result.
The styles are updated before the LateUpdate and before the UI is rendered. In the case submitted, style value were read before the first LateUpdate. By modifying his code, we can see that the value read during OnEnable, Start, Update are all invalid as the styles have not been calculated yet, and then they start being what the user expected.
Please note that if you set the stylesheet in the theme, it will be at the root of the panel directly, but if the stylesheet is referenced by the uxml, it will be applied on the corresponding template container (directly on the UIDocument.rootVisualElement). You will need to adjust your code accordingly. The UI Debugger is a good tool to verify that the styles are applied on the expected elements.