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

uGUI

-

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

  1. 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.

Comments (55)

  1. Gloryiam

    May 11, 2019 14:00

    Just noticed 2019.1.2f1 released today and this still isn't in the patch notes. In which version and when is this expected to be fixed?

  2. wouter_vugt

    May 05, 2019 09:53

    also waiting for this, prevents me from releasing my app. Would like to know when or which version this is fixed in as well.

  3. Badaw

    May 03, 2019 08:57

    in which future release exactly has this been fixed ?

  4. gghitman69

    May 01, 2019 16:17

    Même problème pour moi. Lorsque le groupe de bascule est désactivé, la dernière bascule est cochée et la précédente est décochée.

  5. Checko

    Apr 29, 2019 21:51

    Has anyone from Unity acknowledged this? Can we expect an update soon? This bug inhibits the ability to publish a game.

  6. nixedd

    Apr 28, 2019 14:29

    i have the same problem! when will you fix it???

  7. ReD_Energy

    Apr 26, 2019 22:10

    As everyone here stated... The bug it's really problematic. Can brake any project that uses ToogleGroups. Beside that, it can trigger certain behaviors multiple times because it checks everything again.

  8. dbchap

    Apr 26, 2019 22:06

    Bumping.. this is a real issue

  9. Panzerhandschuh

    Apr 26, 2019 20:52

    I'm having a similar problem where destroying a toggle group internally tries to set one of the toggles on. But the toggle tries to refer to something that was destroyed and throws an error. I didn't have this problem in 2018.3.

    It's probably the same bug (OnDisable gets called when destroying the toggle buttons and toggle group).

  10. waterbearpaul

    Apr 24, 2019 13:22

    Same problem for me. Had to implement ugly fix to keep it working.
    I also noticed that when you create a brand new toggle group, it does not bind to child Toggles anymore. You can easily verify it by activating Debug mode on Inspector.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.