UMG, HUD, Slate?

Seems there are a bunch of different UI things available in the engine.

I’ve read the documentation, and my take away is:

  • HUD provides low level direct pixel drawing

  • UMG is widget system built on top of the HUD, and a visual editor.

  • Slate is another framework which is something for building things like editor extensions (but can also be used in game)

Broadly speaking it seems though, that you can only use one, because you need to set the HUD for whatever framework you’re using.

Is that right?

Why so many?

Which one are we supposed to use?

(For example, using UMG sounds good, but you need to use the HUD directly if you want an image cursor. So…?)

  • HUD Canvas is something that came from UE3 (and maybe even older) and was in UE4 before UMG been introduced and stays as a option
  • UMG is Blueprint extension of Slate
  • Slate is window UI framework made specially for editor (in the past UE editor used mix of Window’s library), but it can used in game too. But Slate classes are outside of UObject envriament and outside of reflection system, thats why it needs UMG wrapper to make it work with blueprints.

You don’t need HUD to make a cursor image, you can widget that follows mouse position on viewport. Also you can use HUD class as a shell for your UMG HUD, you just need to swap few things in it.

Hi. I’m currently at the point where I want to create some kind of in-game GUI and HUD system for my project.

Would you say it’s a good idea to just ignore all the things mentioned here and use game objects that are bound to a camera (or sometimes floating in the world) to display menus, buttons and such? It seems the most flexible thing to do. Is there any reason why I should use a canvas, HUD, UMG or Slate?

Click events with collision shapes are not a problem. The only problem I see, is that very close world objects might clip through the GUI-elements, but there is probably a way to always render something on top of other stuff. At least I hope so.

I tried doing that (because I didn’t want to break into C++ but wasn’t happy with UMG), the problem was rendering text. TextRender components viewed through a camera always look pixelated and horrible unless they’re very large on screen. Slate/UMG has fancy DPI scaling, anti-aliasing, etc., to make text always look nice.

Absolutely you can also do that too, if you want 3D menu, actors are still the best for that