[4.4 Preview - Bugs & Feedback] A few UMG bugs and feedback

Hi there, Epic people at Epic! (If this should be in the forum instead of here, sorry! I’ll gladly move it over.)

I have to say, UMG is amazing. I’ve been working with it for a while now and it’s allowed my project to take leaps and bounds forward. There are, however, a few things I’ve bumped into that could use some work. I fully understand that 4.4 is a preview and UMG is at the experimental stage and as such is per definition not very reliable.


System Specs!
Windows 7 x64
Unreal Engine 4.4 (4.4.0-2237849+++depot+UE4-Releases+4.4)
DXDiag
UMG Widget is created and added to the viewport at BeginPlay from a Blueprint PlayerController and a C++ GameMode in an empty level.

First off, direct simple honest bugs:

  • If you have an infinite loop in an UMG BP graph, the entire editor will crash if you start PIE. Usually, the editor just drops back out of PIE allowing you to rectify the problem.
  • UMG assets are not visible in Standalone mode for PIE. No clicks register and nothing is rendered.
  • Get Full Screen Size returns an empty Vector2D (Do I need to set this, and if so, what does it do?)
  • Calling “Open Level” or any sort of level transition logic (open, travel, servertravel, etc) results in an editor crash if you do not remove the UMG widget from the viewport at Event End Play or elsewhere. Removing it before travelling allows it to work as expected.
  • If you select an aspect ratio for your preview, it’s not retained if you switch to the graph and back again. Not a huge problem, but it becomes annoying in the long run.
  • Using materials in styles doesn’t work - the texture preview simply displays a plain black texture.

Next up, two bugs that are a bit more involved.

  • Copying & Pasting is not working very well.

If you copy and paste something in the UMG designer, the editor has a good chance of crashing. If it doesn’t, no offset data is copied and the element resets back to its defaults. Styles are retained, though.

If you copy and paste a button with a child textblock, you are unable to place or paste any more textblock elements on the same level as the button - if you try, it simply vanishes when you drop it. To allow you to place more elements on the same level, an editor restart is required. This also affects some other element combinations.

Ctrl+Z is very unreliable and crashes the editor half the time you try to use it. It’s nowhere near as good as in the rest of the editor where you can step back pretty far, and it records almost every change you make. In the UMG editor, Ctrl+Z doesn’t record nearly as much - in fact, it rarely works at all. To understand what I’m saying, try placing a few elements, editing some offsets and manually moving them around. Ctrl+Zing won’t work very well if you’re lucky enough to not crash.


  • Checkboxes have no apparent way to access their state.

For some reason, all functions associated with checkboxes are set to protected and can’t be accessed. If you bind a function to the checkbox state, it refuses to change from its undetermined state, and you can’t pull the state from the element anywhere else in the graph.

Other elements such as editable textboxes are totally fine and work as expected.


  • ListBoxes and ComboBoxes only accept objects as their subelements.

This I’m not sure if it’s a bug, or just me being stupid. If I wanted to populate a ComboBox with strings read from an array, there’s no apparent way to do it. From the designer panel, the elements only show assets from the Content browser and I found no way to assign a string to an object within the event graph.

ListBoxes are also not affected if you assign a style to them - they remain in their default state. ComboBoxes lack a way to assign a style entirely. There’s also no way to change settings for the text inside these two elements (font, colour, size, etc)


Now for some general feedback on improvements I’d like to see. UMG is amazing so far, but there’ll always be something, won’t it? :wink:

Something I think UMG really needs is a way to dynamically resize or reposition the UI elements depending on the rendered resolution. If this is already a thing, it needs to be made waaaay more obvious - I haven’t yet found anything that can do this properly! Something that would go a long way is a way to access offset values of the different elements (buttons, panels, etc) from the event graph, as well as a more direct way of getting and setting the resolution used by the game. Console commands work, but it’d be nice with a more direct approach (RequestResolutionUpdate node, anyone?)

Moving on, the widget preview desperately needs a grid/element snap feature. Snapping elements to their parents like you do in VS when developing desktop apps is a godsend and allows for much quicker prototyping and a nicer workflow. In VS, the elements snap with a bit of a margin - I would absolutely love to have this.

I’d also like to be able to select multiple elements (either from the tree view or in the preview) using CTRL. While moving an element also moves its children, it would be really nice to be able to move elements on the same level around in relation to each other.

It would also be very useful if Canvas Panels (or elements in general) could have quick hide/show buttons in the treeview, similar to the eyes in the Scene Outliner. When making multipage menus, I have to set the actual visibility of the element instead of being able to simply preview it (i.e, only in the editor), which is a bit of a hassle. More eyes for the UI god!

In Layout Data->Offsets, the Left/Top/Right/Bottom options are a bit confusing. Left and Top appear to move the element in relation to its parent when it has one and the Bottom/Right appear to affect scale. When on the root element, they seem to swap meaning every now and them. I would prefer having more literal offset values and an actual scale section instead, but might just be me.


Closing off, UMG is fantastic and I look forward to working with it in the future. It’s a very powerful tool, and a big thank you goes out from me to the Epic team for making such a wonderful engine.

Wow, thanks Jargon - this is precisely the kind of feedback we really need :slight_smile:

Infinite loop - can you make some repro cases or post the assets? There may not be much I can do depending on what was involved, but I’ll be glad to take a look.

Standalone - not seeing that repro locally, do you have something I can test that has that issue?

Fullscreen size - It’s poorly named, need to change it to viewport size, but basically, if it’s non-zero, it will be the size of the widget in absolute mode when added to the viewport. Otherwise it will be sized based on the widgets desired size.

Open Level Crash - Will look into making that better. Thanks!

aspect ratio - Yup, that’s an in-progress feature :smiley: Mostly just wanted to get the bones down on paper so people could see where I’m headed.

Using materials - Make sure the material is Emissive Only and is Marked for use in UI. See the screenshot here in the Material section, https://forums.unrealengine.com/showthread.php?25533-UMG-Documentation-for-4-4-Preview

Copy / Paste - Yeah I fixed a bunch of bugs there that should be in the next preview or final 4.4 build. The slot data not being preserved is a known problem, will definitely be fixing that soon. For the button case, try select the parent object, it has this issue right now where depending on what is selected, that’s the parent that it attempts to insert the paste into, but if you have a button selected with existing content, it can’t paste it into the button. I’ve thought about making it go up the hierarchy and find the first parent that will accept it. Not sure, needs some trail and error I think to find something expected/reasonable.

Undo - Yup buggy needs work :slight_smile:

Checkboxes - Woops. Thanks, will get all that sorted out.

ListBoxes and ComboBoxes - Yeah they’re kind of a mess right now, the underlying slate object are very complicated so not sure yet how to best expose them to Blueprints. The Combobox is probably going to become a StringComboBox and then we’ll solve the more customizable combobox and listbox and tile view boxes in the future.

Dynamically resize or reposition the UI elements depending on the rendered resolution - there are future improvements coming in this area. I’ve got a Scale Box control I’ve created for the next version that can auto scale up or down but maintain aspect ratios of content. Good for text you need to fit a predefined area and background images of menus and such. For widgets added to the viewport you can adjust their Position, but not their anchor, I’ll work on improving that. Once The anchor are just normalized coordinates of the widget, so I can set something to 0.5, 0.5 to center it (assuming the alignment (aka pivot) is 0.5, 0.5 as well. Although you can currently do this now, but only inside of a widget, you’d need to throw down a Canvas, and then you could query and modify the state of a Widget’s Slot property at runtime. You just have to cast it to a CanvasPanelSlot, that’s the true own of all those Layout properties on a widget contained in a Canvas.

snap feature - Yup. You can see where I started that when you use the Cross arrow drag handle it will show snap margins, just doesn’t snap.

select multiple elements - Yup.

hide/show buttons in the treeview - Yup.

Data->Offsets - It needs a much better display in the canvas view, the problem is depending on your anchor points it means Position/Size, or it may mean Margin from anchors. The details panel needs to morph to show the right information of what they currently mean. Yeah I wouldn’t try to use them for Scale, scale is coming in another form, you’ll be able to apply a general transform to all widget soon as a render transform, so you can do translation, rotation and scale way easier.

Thanks again for all the feedback and bugs Jargon.

Cheers,
Nick

Just wanted to say thanks for all your hard work Nick! Can’t wait for version 4.4 :smiley:

Wow sorry I didn’t realize this was marked resolved, sorry for opening it back up.

Awesome stuff, Nick! Thanks a lot for the clarifications and peek into the plans ^.=.^ I look forward to more adventures with UMG.

The standalone issue was a case of the dumbs on my part - the elements I popped down were outside of the viewport. Cross that off the list, it’s working fine :slight_smile:

I’ll give reproducing the infinite loop I had a crack - I didn’t write down what I did and rectified the issue when I had it, unfortunately :frowning: I did notice if you do an infinite while loop in Event Tick (Tick->While(True)->Print String “Hello”), the infinite loop message just keeps popping back up when you dismiss it. I had to kill the editor from the task manager :stuck_out_tongue:

Another bug (or at least a downer for simple workflow) is that if you Get a Checkbox’s variable in some function, and pull out from its blue pin the Is Checked function (the one with a bool Return Value) it compiles with a warning ; “this is protected and can only be called in its own class…”

The infinite loop can occur when you do this:
Make a slider (or tickbox)
Create new binding (function is added automatically) on the slider (Get Value 0)
Within that new function, right click and add Get Value 0 to the Return Value output (this should not compile IMO but it does)
In some other function, call Get Value 0 on a branch using its Return Value

Calling a function within itself should prompt some kind of warning…

Recursion, calling your own function is actually totally a legit thing. So I don’t think we can warn, but there might be a way that we can check to see if there’s any branching conditions where it’s impossible for there to be an exit condition and error in the case where no return branch exists in a function that calls itself.

How do I get around the level load crash when working with a main menu? I put the call to the begin play event in the player controller but when that kept crashing, I tried creating a new, empty level and putting the call in the level blueprint, but it still crashed. Right now, the only thing I have been able to do to make it work is treat it like a pause menu, where it is enabled with a key and then disabled with a resume button.

I suggest posting a new question with some screenshots of your blueprints - I’ll have a look.

I can’t post screens as we are working on an unannounced project. This is my personal profile, but I should be getting one on my company’s profile today. We have a contract for help from you guys though (I am at Cryptic) so I can send them to you guys; I just can’t post publicly. On that note, where do I send questions and screens?

For the time being, I am going to make a loader class that will be called at startup and then let that call the main menu widget and hopefully that will work as a temporary workaround. If so, I will let you all know.

Hi dataenroute,

Cryptic will work with us to grant you access to our private AnswerHub instance for custom licensees (the UDN). Once you have access, you will be able to post private questions which only yourself and Epic can see.

Cheers

Hello … : )
I follow this tutorial - YouTube
it worked fine but I lose my gamepad controls, I was be able to use keyboard

Closing this post, since there have been many updates to UMG since 4.4. If you still have an issue or suggestion for UMG, please create a new post.

Cheers