Editor Utility Widgets Feedback

Editor Utility Widgets, new in Unreal Engine 4.22, allow you to modify the layout of the editor user interface and set up Blueprints just like UMG widgets. These are Editor-only UIs, and the current implementation enables you to create custom tabs that can be selected from the Windows menu just like existing Editor tabs.

And we’d like your feedback! How are you using them? What changes would you like to see? We want to hear it all!

If you haven’t experimented with them yet, check out the documentation below or our recent livestream:

Editor Utility Widgets
Editor Scripting How-Tos
Creating Editor Utility Widgets Livestream

Hey folks! If you want to play with the examples I showed on the live stream, you can download them from GitHub.

Give me a shout here or on Twitter if you have any questions!

Suggestion #1: Access to more editor-specific events (e.g. actor selection changed, actor(s) moved, actor(s) updated, etc.). This would make it possible to do things like display real-time information in my widget’s tab without using Tick. :slight_smile:

Suggestion #2: Expose functions for duplicating actors. I want to be able to make “smart” copy tools that allow users to quickly copy actors in specific patterns and/or specific distances.

I think Editor UMG is great! I did some tests and i like it.

+1 for editor events.
Also, more access to the editor viewport. Right now only camera position is accessible, would be nice to have also other stuff like fov, viewport size etc.
Asset list widget, like the standard palette or content browser, so you can drag- and drop into level etc.

This feature has been awesome so far, can do a lot of stuff with it.

My feedback is mostly that we quickly reach the limits of it as soon as we try to do more advanced things than just a few buttons that do simple actions.
Advanced display of data is very challenging, and could be made way more simple.
Ideally it’d be great if we could have “editor specific” UI items like tables, drop downs, filters etc… (see below)

UMG Specific

What i’m struggling with at the moment is making UI that will display data in the way the editor UI would normally do.
I end up reaching the limit of UMG being made for ingame UI and not having access to more editor-like kind of UI.

So doing something like a big table with columns that can be resized seem to be almost impossible without doing complicated workaround and hacks.
My one feedback would be to consider adding very simple ways for people to replicate editor style UI functions, such as tables (with resizable columns), right click menu, drop down buttons, etc…

This is the kind of display i’m trying to go for (Statistics window), and all the nice features you get from having editor specific UI.

But that’s as far as i was able to go without doing crazy things, you can see it’s far from ideal:

Drag n drop
An “easy” way to handle drag n drop of assets into the editor widget BP (or vice versa) with a specific UI element (ideally not with a bunch of blueprint node, but a specific class of UI element that is like an “object picker drag n drop target”, the exact same way you can drag and drop a mesh into a static mesh property in the editor for example.)

UI Styles
Another point that seems very time consuming for no reason is having to handle the state of items in the UI manually (like hovered/selected…).
It seems only the button class has a “style” property that allows easy edit for these states, but if I end up having to use a listview, i have no access to those, and have to do them all manually with events…

What could be good for editor widget BP, is to have an option to inherit the overall style/theme of the editor (match button styles, selection colors etc…)

Blueprint specific
Haven’t found a case yet where I didn’t have access to the BP i needed.
A lot of it is in the Editor scripting plugin, which is off by default, even though editor widget BP is on by default so that’s a bit confusing.

I’ve been building a list of General blutility requests for a while and a lot of them will fit here so I’ll post some more on Thursday when I’m back at my PC, but the ones already mentioned here (all of them) are a big +1 for me. I think the single biggest one for me besides those ones, is being able to bind key shortcuts to utility events/functions.

I’m using these in combined with my data tables and enums (my game is entirely modular) to save and quickly populate building presets. It’s saving me a ton of time in world creation and so far works seamlessly due to the get selected level actors function. Great work, look forward to doing more with this especially as UMG/UX stuff is my bread and butter in freelance so blueprinting in UMG is insanely fast.

I can`t find “filter by ID Name” function…where is it ?

A tool I’m working on uses the Procedural Mesh Component to generate meshes for my levels in-editor. One of the things I want it to do is convert the Procedural Meshes into Static Meshes since they’re being made in-editor and don’t need changed during gameplay. At the moment this functionality isn’t exposed to Blueprints, so I need to manually go into each instance of the Blueprint, select the Procedural Mesh Component, then in the PMC’s details panel click on the “Create StaticMesh” button. It would be amazing if this could be exposed to Blueprints for Editor Scripting.

At around 53:35 of the youtube copy of the stream Lauren mentioned that you can only save the variable to the currently opened instance of the Widget. Really need a way to save variables to the Widget asset (to the actual asset so that it can be easily updated using source control)
Also would definitely like to see those editor only widget components for being able to select assets based on class.
Basically the two I need to make the Batch Rendering tool I want to make for easily setting up batch scripts for Sequencer.

Perhaps I missed it but is there any way to project to the viewport or render UMG in the editor viewport? Would be great for having overlays.

Also I know variables in the editor UMG dont get edited permanently, but is there a way to change values of blueprints or assets? For example if I wanted to make a quest outliner UMG tool to help visualize quests, could that change the value of a data table or .uasset as my developers change out tasks or requirements? Or is it locked to editing values in the level instances?

Thanks for all the feedback and questions so far, folks! I will do my best to get answers for all of you here over the next little while, but hope you can bear with me as I will probably have to do some investigating myself. There’s lots of cool applications mentioned in here, so I’m looking forward to giving things a try!

I’ve had this error a few times since starting to play with the editor utility widget - not sure if its to do with the widget or just a 4.22 UMG thing, and I don’t have a reliable repro yet but I’ll leave this here:

LogOutputDevice: Error: === Handled ensure: ===
LogOutputDevice: Error: Ensure condition failed: !IsGarbageCollecting() [File:D:\Build\++UE4\Sync\Engine\Source\Runtime\UMG\Private\Slate\SObjectWidget.cpp] [Line: 43]
LogOutputDevice: Error: SObjectWidget for 'Spoon_Tools_Rollout_C /Engine/Maps/Entry.Entry:Spoon_Tools_C_0.WidgetTree_0.Spoon_Tools_Rollout' destroyed while collecting garbage.  This can lead to multiple GCs being required to cleanup the object.  Possible causes might be,
LogOutputDevice: Error: 1) ReleaseSlateResources not being implemented for the owner of this pointer.
LogOutputDevice: Error: 2) You may just be holding onto some slate pointers on an actor that don't get reset until the actor is Garbage Collected.  You should avoid doing this, and instead reset those references when the actor is Destroyed.
LogOutputDevice: Error: Stack:
LogOutputDevice: Error: [Callstack] 0x00007ff9ad4cdc3e UE4Editor-UMG.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9ad3526ea UE4Editor-UMG.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af46960a UE4Editor-SlateCore.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af94080e UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af933068 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af936ee9 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9ad407c8b UE4Editor-UMG.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d0d10deb UE4Editor-CoreUObject.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d0cee40c UE4Editor-CoreUObject.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d0c9ce0d UE4Editor-CoreUObject.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d0c9c3ea UE4Editor-CoreUObject.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9aca42265 UE4Editor-Kismet.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9ae525404 UE4Editor-UnrealEd.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9acb2dad6 UE4Editor-Kismet.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9acb48e78 UE4Editor-Kismet.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af7917ca UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af8690e2 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af84aa44 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af9029d2 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af754021 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af7d02c1 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af7baa8a UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9af7b03d4 UE4Editor-Slate.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d148b8e0 UE4Editor-ApplicationCore.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d147ef9f UE4Editor-ApplicationCore.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d148d77f UE4Editor-ApplicationCore.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d147c090 UE4Editor-ApplicationCore.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9e8e26d41 USER32.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9e8e26713 USER32.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9d148e946 UE4Editor-ApplicationCore.dll!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff6a5d45d3e UE4Editor.exe!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff6a5d5554c UE4Editor.exe!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff6a5d555ca UE4Editor.exe!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff6a5d6315c UE4Editor.exe!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff6a5d65b7e UE4Editor.exe!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9eb683dc4 KERNEL32.DLL!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9eb943691 ntdll.dll!UnknownFunction ]

Another suggestion would be for an eye dropper type of tool or widget for editor utility widgets incase we only need to select one actor in the level for something, or a specific type of actor… that would be nice


So far the UMG widgets are a great addition to UE4. That said some future improvements:

  • Functions for adding components to a blueprint. i.e. For selected static meshes in content browser add them to this blueprint. Also have this work with blueprints with inherited components
  • Easier Asset Reference from Content Browser, i.e. drag and drop Uasset from Content browser into UMG widget, right now getting the assets path works, but could be made easier
  • Functions for appending/bulk editing assets. i.e. For selected static meshes in content browser set “Use High Precision Normals” to true
  • Exposed functionality for asset/material creation. Right now this is possible in python by using create_asset. However in blueprint you are currently unable to create or reference a factory class.

That’s all for now, I’ll probably end up coming up with some more at some point.

It would be helpful to have the table view exposed to UMG somehow, both for this and other purposes.

I’ve been using the “get selected level actors” function that was covered in their video last week, it works fine. If you want to get the eye dropper you can create an exposed variable that looks for an object type, can’t you?

You might be thinking of a regular blueprint. In an editor utility widget, you’d have to make an eyedropper button yourself and when it’s clicked, enter a special picking mode, then somehow get the object under the mouse cursor in the viewport on click (the latter is something I think was mentioned early in this thread that they are looking to improve). As you say though, “get selected level actors” is fine for most cases (if you want to leave the selection untouched though, eyedropper is good).

Gotcha, thanks for the heads up haven’t explored the utilities completely yet so that’s good to know.