Widget Switchers Not Seeing Children's Updated Variables

Hey there!

I may have found a bug utilizing UMG and Widget Switchers. When I call a child blueprint in a widget switcher, variables in the child don’t tend to update. If I call the said child widget by itself (outside of the widget switcher) it works just fine. Is this a bug or am I missing a way to update/reload the widget switcher? I’m using the latest engine, 4.11.1. I was working on my primary project in 4.11 when I encountered this issue, so I updated to 4.11.1, but the issue persists.

I’m not the greatest at explaining things, so I created a video from a blank project reproducing the steps in 4.11.1: - YouTube

Here’s what I did in the video:

  • Created a blank project (to show it’s reproducible outside of my project).
  • Created two widgets: Options and GameplayOptions.
  • Opened GameplayOptions, created a text component, did a bind of the text content.
  • Promoted the Return Value to a variable. Typed “HELLO” into the variable.
  • Opened Options, created a widget switcher, then added the GameplayOptions widget as a child.
  • Opened the level blueprint, created Options widget (the widget with the Widget Switcher inside of it), added to viewport.
  • Played game to show that the variable text is correct (shows “HELLO”).
  • Quit game, went to the GamePlayOptions widget, changed the variable from “HELLO” to “MY NAME IS STEVE”, compiled & saved, ran the game again.
  • This time, the variable doesn’t update (still shows the old “HELLO” text, when it should be showing “MY NAME IS STEVE”).
  • I then went to the level blueprint again and changed the widget to the GameplayOptions widget and played again to show that indeed, the variable is updating in its own widget, but not when it’s shown through the widget switcher.
  • I then demonstrated again by changing “MY NAME IS STEVE” to “THIS WORKS” (still leaving GameplayOptions as the created widget in the level blueprint) and that updates fine.
  • Finally, I went back into the level blueprint and changed it back to Options and it incorrectly shows “HELLO”, which is the very first text I typed into the promoted variable.

Hopefully my explanations are clear. I’m not sure if it’s a known bug or not, but it seems like the widget switcher doesn’t “see” updated variables from its children.

Thanks for looking into it!

-Kyle

Hello ,

Thank you for the detailed report, I was able to identify your issue very quickly because of this. This is working as intended, due the fact that bindings are not run during design time. Instead bindings are only run during run time. I hope that this information helps.

Make it a great day

Hi Rudy, thanks for the info.

I’m a little bit confused on your answer. To be clear, I am running these widgets at runtime, but the bindings are not being updated when within a widget switcher (but the bindings update fine when standalone, outside of a widget switcher).

The video and description shown in the original post are shown in a blank project. In my primary project, I have a “Settings” widget that contains a widget switcher and 4 buttons to switch between children. The buttons are for video settings, audio settings, gameplay options, and controls.

Inside the widget switcher are child widgets for various settings (VideoOptions, AudioOptions, GameplayOptions, Controls - all of which are separate UMG widgets).

Inside the VideoOptions widget, I have all the necessary components (ability to change resolution, toggle vsync, change quality of shadows, textures, etc). I have the text for each created as a binding to be able to change the settings at runtime (for example, allowing players to change their shadow quality from high to medium).

Now if I run the VideoOptions widget by itself (meaning, not within the widget switcher or within the Settings widget), it runs fine. However, if I place VideoOptions inside the widget switcher (which is on the Settings widget), it’s like the binding doesn’t exist anymore (when it does exist).

I feel like the binding should still be able to be seen while it is inside the widget switcher.

tldr; Child widget’s text variable has a binding on it, works fine when running by itself (outside of a widget switcher). Adding the child widget (that contains the binding) to a widget switcher of another UMG widget breaks that binding and doesn’t “see” that binding. This is indeed being tested at runtime, not design-time.

I hope this makes sense. Please forgive me if I misunderstood something. :slight_smile:

Thanks again,

-Kyle

Hello ,

After taking another look I see that I misunderstood your issue. After that I was able to reproduce this issue on our end. I have written up a report (UE-29479) and I have submitted to the developers for further consideration. I will provide updates with any pertinent information as it becomes available. Thank you for your time and information.

Make it a great day

This has seemingly not been resolved. I am using UE5.0.3 and I have the same problem almost 8 years later.

Yeah, i tried just “reload asset” but then engine crash, its annoying to keep changing for newer widget if u make some changes. U found some way around it?