Search Issue Tracker
Won't Fix
Unknown (hidden) 2020.3.X, 2021.3.X, 2022.1.X, 2022.2.X, 2023.1.X
Votes
0
Found in
2020.3.42f1
2021.3.14f1
2022.1.23f1
2022.2.0b15
2023.1.0a19
Issue ID
UUM-19944
Regression
No
Serialized List items with "PropertyDrawer" change when adding or removing list items
How to reproduce:
1. Open the attached project
2. Open Scene “SampleScene“ (Assets/Scenes)
3. Select the “Main Camera“ GameObject in the Hierarchy
4. Expand the “Settings“ menu and then, the “Items“ list in the “Example Component” Component
5. Delete two items by pressing the minus symbol at the bottom right of the item list
6. Add an two items to the list by pressing the plus symbol at the bottom of the “Items” list
Expected result: Items are added and removed without affecting the already existing items
Actual result: The already existing items change
Reproducible with: 2020.3.42f1, 2021.3.14f1, 2022.1.23f1, 2022.2.0b15, 2023.1.0a19
Reproduced on: macOS 12.5 (Intel)
Note:
- Might have to delete or remove more items than said in reproduction steps to reproduce the issue
- In newer versions, deleting or adding items affects other items only when changing an existing list item and then adding or deleting a list item (doesn’t work if the changed item is the last one on the list)
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
- The letter "i" is incorrectly formatted into “İ" when capitalised if the devices Region is set to "Turkish (Turkiye)"
- [VFX] No templates available in Default VFX Graph Templates window
- [VFX] "ArgumentException" error thrown when trying to add/create Curl Noise Node
- Properties of custom visual elements fail to initialize when inside of template that has been renamed
- HDR output fails to render in Player when using Direct3D11 in Exclusive Fullscreen mode
Resolution Note:
After investigation, the issue appears to be with the CustomPropertyDrawer code.
Unity reuses property drawers to draw all items, so any variable in it acts as a sort of static reference. So in this case, since we grab the reference of the SerializedProperty on each `CreatePropertyGUI`, only the last one is actually kept, meaning that it only changes the last item in the list.
Make sure to store the value locally to the dropdown instead, by saving it in `userData` for example, and get it back in the callback like so `var value = (evt.target as VisualElement)?.userData as SerializedProperty;`.
Resolution Note (2022.1.X):
2022.1.X ports are superseded by 2022.2.X (cancelling port)
Resolution Note (2020.3.X):
2020.3.X ports not supported since it would require fix to also be ported in the package (package workflow not supported anymore). Please use 2021.3.X or more recent.