Set Visibility of Widget from another Widget

Essentially I have a main menu widget, and an options widget. This seems the best way to do it, unless I’m wrong, instead of doing it all in one big widget blueprint. The problem becomes that I have to use create widget, and then destroy said widget every time, instead of just unhiding and hiding the options menu.

I am not sure how to let two widgets… see each other and their variables though, so that they can interact with them. Like I’d like the options menu to be able to hide itself and at the same time, unhide the main menu, but they can only interact with their own variables it seems.

You can use “Get All Widgets Of Class” to find the widget you want to touch, then call any functions that are in that widget to do your desired action.

So in your main menu have a function that unhides itself when called. Then in your options menu call “GetAllWidgetsOfClass → MainMenu” → “Unhide MainMenu function”.

Alternatively (and probably less performant), you could probably also put a variable on your character or in your game mode, that those widgets then watch to determine if they should be visible or not.

Basically, “isInOptionsMenu” bool on your character, and the MainMenu/Options hides/unhides itself whenever that value changes.

Oh, you can also create a reference variable when you first create the widgets, that will let you directly access the variables.

Then just call into wherever you are storing this ref, from your widget, to modify the other.

I thought I had it set that when I received an answer it would go to my email but I never got one so I just assumed no one had answered. Regardless thank you for the response.

In regards to the solution: Do you think just keeping a variable/variables on some invisible object in the world is the best way to do it? I mean is that how you would do it? I’ll be honest I don’t know a lick of code so this is a massive learning experience for me.

That being said I’d like to drop a quick other question for you if you don’t mind: I want to make a game that is in essence just a bunch of menus, with a clickable overworld. I have been looking around for tutorials on how to make more complex menus but the only Unreal documentation I can find is very simple main menu tutorials. I was wondering if you knew of any better ones or if you had any tips on maybe how to learn menus with Unreal?

Thanks again.

Like I mentioned, putting it in the character blueprint, or the game mode blueprint is probably your best option. If you are doing a menu only game, with no character blueprint, I would toss it in the game mode blueprint.

I’m mostly self taught, so I don’t really use tutorials, sorry.

For a menu only game, you would basically be extrapolating on the basic menu tutorial. Clicking a button closes/hides the current widget and opens the next one in the chain that you want.
Complexity of the menus is basically determined by the layout you use to make it.
Make use of panels to build your widget (the widget switcher and the vertical / horizontal boxes, etc), and you can do pretty much anything layout wise.

For example, an overworld map would most likely be a two uniform grid’s, One would be the background displaying the map, filled with images and/or buttons.
The second would be empty, except for one image, to display the player. Then you simply manipulate the row/column number to move them around.

Hope that helped!

Definitely very helpful. I suppose I’ll just poke around and see what I can learn. Did you have a background in code? I know it definitely helps, but part of the reason I chose Unreal and blueprints is because I have very little knowledge in coding.

Mind if I pick your brain just a little more? I don’t remember the widget blueprints having access to the level blueprint, but I could be completely wrong.

Also wouldn’t having a widget constantly watching a variable be hell on performance? Especially if you have many menus?

Coding and design background.

I assume you mean game mode, not level. Yes, it can access it, simply do a get game mode, then cast it to your game mode.

Yeah, you don’t want to put a ton of stuff on tick, only if it absolutely needs to update every tick. Otherwise you can set a timer, and have it run every X seconds.
For this scenario, you just want to check the variable when you are opening/closing a widget via button click, so it wouldn’t be an issue in any way.

Honestly I am just going to keep asking questions because this seems like a great opportunity to learn. Feel free to stop answering at any time.

When the level loads I create two widgets. The main menu widget which is visible and the options menu widget which is hidden.

Inside of the main menu widget I want to be able to set the options menu to visible. So I am trying to… cast to the options widget, this is correct right? But then it wants something in the first object input, which I am assuming is the parent class, which would be the very options menu I am trying to manipulate? Which I don’t have access to which is why I am casting. It’s very confusing.

121712-l9ev2l1[1].png

Any insight you can shed on this would be fantastic. This is the biggest hangup I have hit.

Yeah, it is looking for a reference to the options widget. Casting is used to tell the system what an object/reference is, if it is stored as a generic type, not to find that object. For example, when I use “Get Game Mode”, it returns a generic game mode item, that I can then either call generic baseline game mode functions on, or I can cast it to my specific game mode, so I can then call any custom variables or functions I have created in it.

What you would want to do, is something like, “Get widgets of class”, set to the class type of that widget. Then manipulate that. If you are going to be using it regularly, you should create a reference variable of that widget type, and store the reference when you grab it the first time, to save cpu.

If you expect to need them in multiple widgets, its another thing you could store in the game mode, so each copy doesn’t need it own reference to it.

I spent a considerable amount of time looking into just what exactly casting was and with your help I think I am finally getting it. It seems really important considering it looks like it’s used all the time in tutorials.

That being said I had tried out what you mentioned beforehand, the get widgets of class thing, and trying numerous ways it never seemed to work.

Attached are the two images showing exactly how I tried to go about it. Not sure what I did wrong here. I even showed it to someone else who works with Unreal blueprints and they couldn’t tell me. Any insight you can shed on this?

I tested to make sure it was reaching the execution of set visibility itself. I also know they exist properly, for example if I just have it so that visibility is set from execution to visible it will be there. Doing it this way doesn’t work though.

Yep, that’s a bug I was hitting that CS says they are unable to reproduce.

https://answers.unrealengine.com/questions/543702/progress-bar-visibility-percentage-stops-visually.html

Well that’s odd, and also heartbreaking. I guess it’s time to work around it.

So just in regards to the original question then, you said you can create a reference to the widget and then just call into wherever you are storing the reference. So you can’t pass the reference to a widget class? Do you think you could expand on the calling into the object to access the reference?

You can pass the reference. You would just need to create an empty reference of that type in the widget, then when you create the widget set that reference in the creating widget, and then call a function that constructs everything.
So like;
CreateWidgetA → SetWidgetARef(MainRef) ->CallWidgetAConstructionFunction

Calling into to get the reference is as simple as;
GetGameMode->CastToMyGameMode->GetRef

If you only need to get the reference once, I would just get it from the game mode. If you are going to need to get it repeatedly in that widget, pass in the reference. Basically need to judge where you want to expend the memory to keep the reference active, or where you want to spend the cycles to grab it.

So I thought about doing it that way, putting the creation of the widgets in the gamemode, but then I realized I’d have to make two gamemodes, otherwise I’d have the main main menu on every level. Which I guess making two game modes isn’t that big of a deal, just something a new person like me might have some trouble with. I decided to take one more crack at getting a work around, considering that get all widgets of type is glitched. I thought, hey, what if I just set references to the widgets in the level blueprint and then made those variables public, I should be able to see them right? But I can’t see them from anywhere else.

Is this normal or am I just doing something wrong? I’m guessing if it was that easy you would have told me.

Get widget’s works fine, it is the setting visibility part that glitches out. You can still get/set the variables.

Hello everybody. I’m working with widgets, I use them like 3D elements. There’s a simple to set different visibility to a widget’s element, instead of using lots of widgets.
I simply created a widget. Inside I put a text wich activates a button (actually it make it appears) that you can use again. All

the elements are inside the same widget.
Here’s the blueprint, hope this can be helpful.

Also if you want to set visibility of another widget you can simply use this Blueprint. Inside the Get All Widget of Class function I selected the widget I wanted to modify. Note that Top Level Only is unchecked.