The UI system of Godot is too difficult to use

Godot Version

4.4

Question

The UI system of Godot is too difficult to use. Making UIs almost takes up 80% of my time for game development. If Godot had a FairyGUI support library, I might only need to spend 20-30% of my time on UI creation…

3 Likes

I must admit that getting used to how Control layouts worked took some trial and error, but now I have learned it, I have to disagree. I now find it very easy to quickly achieve almost anything I set out to, and what’s more I can do it step by step in the sort of exploratory manner that is great for prototyping. The control nodes are consistent, have sensible defaults, 100% reliable and just work! I now seriously love how they all interact and it gives me total control over the layout in a simple and yet powerful way. I have yet to come across a need that has not already been covered by either a dedicated node or an option within a node.

Anyway, this is the help section. If you post what you wanted to achieve and perhaps what you have already tried, maybe someone can point you in the right direction.

Hope everything else goes well for you. Good luck with your game.

7 Likes

Godot supports plugins, it might be worth your time to do a FairyGUI plugin yourself…

2 Likes

Meanwhile, as someone coming from a web development background, I am often frustrated with how rudimentary Control nodes feel. I’d have really appreciated it if Godot had something more robust built in, ideally something that works similarly to UI in a browser. It’s been quite a time investment building my own.

In any case @Kevin_Chen, it would be the FairyGUI maintainers who would be responsible for maintaining a Godot addon, like they currently maintain their Unity addon and some others. You might have a better chance at getting what you’re looking for by reaching out to them, rather than posting here.

2 Likes

To me, it feels very similar to HTML (for better or worse). As a web developer, this is a plus for me, since I’m used to the whole container hierarchy and event-driven structure. Even the theming process reminds me a bit of CSS. I guess it’s just a matter of getting used to it.

2 Likes

It’s a pity that the author of FairyGUI has no intention to support Godot. The UI of Godot has many details that don’t meet expectations, making it impossible to build a differentiated UI experience. I’m currently trying to establish my own UI library… This is a painful process…

For me, this is precisely the problem. I think as for the game UI, it shouldn’t offer so many detailed customization options. Instead, it should provide a simple and flexible customization solution. HBox, VBox, Grid, Theme, etc. all make the UI system look bloated, while the basic API is very messy and it’s difficult to use when customizing UI components…

For me, creating a differentiated UI experience has become extremely challenging. You spent a lot of time learning Godot’s UI components, only to find that they are not what you wanted. Admittedly, layout does have some effect, but in most cases, the UI of the game exists in the form of components, and in most cases, the size of the components is fixed and there is no need to change the theme. I don’t quite understand why Godot has made such a big effort in these aspects? These should have been regarded as an optional feature from the design perspective, rather than being something that needs to be learned from the very beginning.

I doubt the Godot team would accept it at this point, given how much time and effort has been invested into Controls, but it would be nice if there were a future in which Godot could deprecate Controls in favor of two separate (ideally interoperable) systems for UI: One absolutely stripped-down and simple and easy for beginners to understand, without this focus on dynamic or adaptive layouts that @Kevin_Chen I think understandably has found to be obtuse and excessively complicated for their use case, and another more robust solution that more closely resembles Unity UITK. Which I’ve yet to use personally, but which from what I’ve seen seems like a genuinely fantastic tool for more advanced users.

It feels like Controls are just this very unhappy medium. They are too complicated for beginners to easily grasp, needlessly heavyweight for those working on a more simple or static UI, and yet woefully underbaked for advanced users who are accustomed to the benefits of having much more robust layout and theming tools, and accustomed to defining UI structure and reactivity using markup instead of a cumbersome WYSIWYG editor.

I’m very glad that Godot exists. But I’d be a lot more glad if I wasn’t burning weeks of time on building a less rudimentary UI system that isn’t constantly getting in my way and making iteration and refinement so very tedious, as Controls have been doing. Time which I really hoped to spend on building my game instead. Time which I doubt would have to be spent this way if I were using Unity. (If only I could trust the company that owns the engine not to self-immolate at any moment.)

I couldn’t agree more with your point of view. I’ve really wasted too much time on obstacles that shouldn’t even exist, such as layout and theming. It’s quite awful to waste time on features that I don’t even use, and there are no other alternatives, at least for now.

Only thing I’d want is Control + Space to bring up content browsing menu, Rest feels a lot like Unreal Engine to me

Indeed, I am a long time programmer and – though I could entirely understand it – the Control node based UI which is so low-level just killed my game. I tried multiple times and just COULD NOT get into it. I wanted to so badly.

I guess I just come from the old Borland Delphi days when it was SO EASY just to pop up multiple pre-made dialog boxes that did 99% of what I needed. They were pretty easily theme-able, but had a limit. At that point, you could drop down to lower levels if you needed to theme further, but I never did.

I think this is more than just a gaming issue. If Godot wants to be used for “general purpose programming”, it needs to offer some kind of widget library like this, baked in (or, like others have suggested, at least a (very) commonly used extension to do same.

1 Like

I really don’t understand the problem here nor why people are complaining about this so much.

You want buttons at the bottom left of your screen. You add a canvas layer, bang in a control node and fix it center bottom. Bang in a HBOX and center that, then bang in some buttons and you are done.

Want some margins, chuck in a margin container.
Want a panel, chuck in a panel node.
Want a scroll box, bang in a scroll box.

Want some buttons at the top left, chuck in another control node, or make the original one cover the entire viewport, then add a new margin container fixed top left.

Really! Wow. Surely not the layout though. The game mechanics, the graphics, the interactions, the alert systems, the user notifications, the in game help systems, maybe, but not the layout!

This stuff simply is not difficult. What exactly are you trying to achieve that is taking you so long? I just don’t get it.

2 Likes

Have a look at this plugin

1 Like

I think it’s all the settings that can make things difficult. Sure, I can use VBoxContainer to place a TextureRect on top of a button in a matter of moments. But then the texture takes up 80% of the screen. So I start playing around with the container sizing, the texture stretch mode and anything else that might be relevant. But I cannot for the life of me get the two elements to take up the same vertical screen space without altering the image. ChatGPT isn’t much use for this, as it just tells me to use setting values that I’ve already tried.

So it’s not that I can’t get basic layout elements set up quickly. It’s just that the time it takes me to get it looking even passably good is far in excess of what I would expect.

Don’t get me wrong, I really like Godot. But I dread trying to make UI with it, and I always look forward to the more functional stuff in GDScript, or working on my C++ backend. Hopefully this feeling will pass after I’ve spent a few more months working with the engine. I use the documentation a lot, because I think it’s really good, and there are great tutorials online. I’m going to revisit this one next.

Sorry, I really don’t understand.

Here is a texture rect above a button in a vbox.

Here it is again but shrink begin:

Here it is again with shrink end.

Here it is stretched:

Here it is with a min height:

Here it is with a min width:

Here it is with a margin container for additional control:

I could go on, how much more more control could you possible want? And with a single click it can be in the centre of the viewport, top left, bottom right etc?

And here it is with just plain and simple editor only option styling on the button.

Personally, I think UI with Godot is easy and straight forward.

1 Like

I would like enough control to produce menus containing elements that appear with the size and position that I assign to them. I have over the years reached this very low bar in everything from Visual Basic to C++/SDL.

I had hoped to come to the same conclusion as you. Regretably I haven’t, but that isn’t a huge problem. I shall revert to using SDL2 + TGUI for my serious game UI needs, and use Godot for fun side projects. Who knows, maybe one day I will be doing a Godot game jam and suddenly the UI system will click for me. In the meantime, while I do like GDExtension, at least this outcome saves me from having to port my entire C++ backend.

Just took a look at TGUI. I really don’t think it is that different. Here is a mock up of their example done in Godot via just the control nodes which can be positioned anywhere you want.

(Obviously I didn’t go to the effort of creating the textures and the panel I have used you would probably want a NineRectPatch for flexibilty etc but this was all done in the editor options in 3 mins, except I found an icon I could use for the checkboxes and I re-used a minus button I had handy for the sliders)

But I suppose it does have to click. If you are using SDL2 and TGUI to create games in pure C++ then you are probably far more advanced than I. Best wishes and good luck.

PS If you change the root to a node2d you can then position this exactly if that is what you meant by positioning, instead of relative to the viewport.

PPS I just didn’t want potential new users to think that the UI system is awful. It isn’t. It is flexible, powerful and 100% reliable. You can pretty much do anything with it.

1 Like