Search Issue Tracker
Fixed in 2019.3.X
Fixed in 2019.1.X, 2019.2.X
Votes
28
Found in
2019.1.0a5
2019.1.0f2
Issue ID
1146883
Regression
Yes
Re-enabling game object with "Toggle group" loses information about previously checked toggle
Steps to reproduce:
1. Open attached project "Test.zip"
2. Go into play mode
3. There are 3 toggles at the top, select a red one (row of red toggles should appear on the left side)
4. Check the first toggle on the left side row (You can check any toggle, but remember your choice)
5. Press green toggle (from 3 toggles at the top)
6. Press red toggle again (from 3 toggles at the top)
-The first toggle is not selected anymore from the left row, instead, another toggle is checked randomly. (Attached a video)
Explanation: Toggles at the top disable/enable "Toggle group" (only a single game object with toggle group is active at a time)
Expected result: After re-enabling element with "Toggle group" it shouldn't uncheck previously checked toggle
Actual result: Re-enabling game object with "Toggle group" loses information about previously checked toggle and instead checks random toggle in the group
Note: Sometimes it takes a couple of tries to reproduce the bug (repeat steps from 3rd step)
Reproduced on: 2019.1.0a5, 2019.1.0a6, 2019.1.0a11, 2019.1.0f2, 2019.2.0a1, 2019.2.0a10
Doesn't reproduce on: 2017.4.0f1, 2018.3.13f1, 2019.1.0a1, 2019.1.0a3, 2019.1.0a4
Regressed in: 2019.1.0a5
-
Gamrok
Apr 24, 2019 13:14
Same problem for me. When the Toggle Group is disabled, the last toggle is checked and the previous one is unchecked.
-
Checko
Apr 24, 2019 11:30
We too are experiencing this problem. Unfortunately reverting back to 2018 is a large measure of work. I hope to see this resolved soon. One thing to note is that the unexpected behaviour is only when the toggle group "allow switch off" is unchecked. Checking this seems to work as expected. That however is not an option for our use case.
-
eladleb4
Apr 21, 2019 12:26
This makes toggle groups unusable, we decided to wait with the 2019.1 adoption for now.
-
ROBOROBO_LAB
Apr 19, 2019 07:31
ㄱ
-
onurerler
Apr 19, 2019 07:08
the problem occurs when disabling parent object toggles become checked
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
- “ArgumentOutOfRangeException“ error when selecting 'TMP_InputField' content using keyboard in WebGL build
- Spot Light with 'Box' Shape stops working when it collides with Mesh
- Accepting Asset Store EULA endless loop in Package Manager window
- “InvalidOperationException: Sequence contains no matching element“ error when reenabling a custom Debug Draw Mode
- Prefab that contains a layout group is marked as changed by the Editor when opened
Resolution Note (fix version 2019.3):
By default, ToggleGroup is coded to activate/deactivate the container for all associated Toggle elements. When the container is deactivated, all contained Toggles will get their OnDisable called. This will cause the Toggle to unregister itself from the ToggleGroup.
When a Toggle calls UnregisterToggle() on it's ToggleGroup, it is removed from the ToggleGroup's internal list.
Previously, any time UnregisterToggle() was called on a ToggleGroup that is set to disallow an off state, the group will then scan its list for at least one checked Toggle. Because the checked toggle is ultimately removed from the list before the list is totally emptied, the group will attempt to fix itself and set the first Toggle in the list to be On. This creates unpredictable behavior, both because the order of the list is non-deterministic, and because the first list element is rarely the value that should be set to On.
This PR moves the logic for ensuring that one Toggle is marked On to a new function. The only times that this function actually needs to be invoked are:
a) when the ToggleGroup gets its Start() method invoked. This will ensure that a ToggleGroup created in the Editor has a valid state when loaded.
b) when a Toggle is deleted from the ToggleGroup. If the checked toggle is deleted programmatically or via the scene hierarchy, the list must choose a new one.
New Toggles that are added programmatically will fix the state of the ToggleGroup as happened previously.