I wouldn't worry about video length when making tutorials like this... I'd rather watch this for an hour than go through 10+ other, 10 minute long, half assed tutorials. Thank you!
Just to say one tip. The UE guys in the Common UI tutorial on their channel said using canvas panels for all your widgets will be a CPU bottleneck. You should not try and use canvases if possible or if you do very little.
@@maxwellprince5742 You just use other things like Overlays. It means altering how you construct your widgets but you deffo dont need canvas panels. I only use one in my whole project for my HUD and thats it
@@maxwellprince5742 Think of a canvas panel as a glass window over your game. It's transparent, but it's still calculating. Then you add more canvas over that, making a multi layer transparent shader. It can get pretty expensive and will drop your frame rate. The BEST is to use a material shader to build ur UI, but if that's not possible, then standalone modal widgets are the way to go. It's best to profile and then see if you can budget canvas into your game.
Thank you so much for making video that explains how to do thing "correctly" in a real development situation and not just the basic way. That is really useful.
I've been looking for a tutorial like this for half a year now because I was floundering with how to handle my UI systems. I've seriously been doing everything inside of the individual widgets' blueprints and it got so incredibly messy. A nice framework like this was the jumping-off point I needed to get everything working the way it should. You're saints man, hats off.
Thank you for this. Finding tutorials that teach best practices are rare. Most tutorials just teach game jam level implementations. This right here is a gem of a video. Thank you ❤
Thanks for this videos, i have seen many people making unreal tutorial channels and than give up half way, so is kinda difficult to find a channel that push until the end of i project, i hope this is not the case, i have learned a ton today, thanks a lot.
Awesome - I couldn't find my macro because I was using your player controller that you built in previous videos. My parent class was "character". But I was delighted to figure that out! I've learned more in this tutorial than in any other.
That's amazing. I really love that you show the principles behind your decisions first, because when you understand principles you can begin coding! Thanks! HUD Class + Player Controller is super setup)
I love this kinds of tutorial! Makes me feel more ready to persue the industry by follow best practices, please make more, (perhaps about organization of assets, or packaging?). Thanks!
If you are making a game to release and others to play you should probably look at using the "Common UI" plugin provided by EPIC since late UE4 which is also used in Lyra as it allows for theming, handling different / swapping inputs and alot of the "core" / "common" logic most people end up always doing in UI development.
Unfortunatly it’s highly limited in blueprints. I recommend it more for C++ projects. It’s rather complicated and undocumented last time I checked. For me it saved more time not to use it.
@@GoodguyGastly In 5.2 they have updated Common UI to work with Enhanced Input and have fleshed out the documentation more but its still lacking. Some YT'ers have recently released some videos on the topic + there was a recent'ish EPIC released video too.
CommonUI is still garbage unfornately. Even the CommonUI demo map in Content Examples project is broken. For example if you press your close/back button twice on a game pad when a pop up widget is inside its animation fade, it completely breaks focus.
Thank you for a cool middle-level tutorial! It is very hard to find such staff covering proper organisation (split logic between PlayerController and HUD class, and so on...)
Really insightfull tutorial UI management is a topic I haven't seen much about especially when it comes to multiplayer and its nuances. Keep up the awesome!
Thank you very much, I am just yet diving into widgets, As you know it's not about writing code, it's about writing performance friendly code. I'll watch this several repeats to understand a few, It's just the beginingg of the way and short for me... Maybe other friends do know everything, They may see it boring but it's not boring for beginners like me who just got there after accmoplishing previous in game making, Thank you very very much, Regards....
Sooo that is where the HUD goes, not in the controller, game instance or game mode like everybody else is showing 🤔 Watching your vids for a while now and it's always a pleasure when something new shows up.
Great, this is the best multiplayer game tutorial in the world, we need more tutorials of this level, the idea is very clear, looking forward to more videos about managing multiplayer games, subscribed and liked!:)
Thanks for the tutorial, I understood only a half of it yet. But I was able to include a pause game state with an Enhanced Input Action instead of a keyboard event. I wished the menu had a close button or an x, just to learn the right alternative way to exit the menu from a widget blueprint with the solution from this tutorial.
I had the same question. I was wondering what would guarantee the HUD class being valid? What if the counter expires and we never get the valid class? Not checking if it is valid again would error out. Edit: I may have spoken too soon. At 37:15 he does check if it is valid again, so it shouldn't error out
Really amazing, I personally miss this level on in-depth tutorial. Love you guys. I hope to see similar in-depth techniques in future. Any one reading this comment First Subscribe!!!
17:40 - Bro's laughing very proudly... 19:08 - 💀 22:10 - Somehow, it's giving me motion sickness ;-) 23:53 - Big 🧠 Just found out your RU-vid channel. You're underrated af. Enjoyed every moment of these videos. Keep it up, dude! You deserve millions of subs!
Revisiting this video. The Hood Class joke is actually pretty funny. Cheeky. Glad you have all these videos. They have really made me re-think how I approach setting up my projects.
Great tutorial! though, its amazing how UE make such a simple functionality a long and tedious task! this will take less than 5 minutes to implement in Unity :). Keep the great work man!
Hey great video! I have question about managing, how would you setup UI that have alot of depth, for example menu button opens class widget that can open many class widgets, and those widget can open another multiple widgets. Thanks for any suggestion, once again i want to say amazing videos!
Around 25:00 you are using inputs directly in the graph - isn't it more appropriate to use an InputDataTable and mapping, so that there are not direct coupling between the menu classes and the input map? Then the user could ostensibly remap input as well as having abstract interface for gamepads, etc. I'm a noob, trying to learn, but it seems that Enhanced Input allows for this type of paradigm in-editor, and then you could GetEnhancedInput action from the graph, instead of the explicit key.
@@Kekdot as i followed your steps when i changed the player controler class to BP_PC_BaseSetup in BP_GM_BaseSetup i lost my movement in game. Using 5.1.1 version. its this the case discussed above ? any idea how i could fix it pls ? i started 2 days ago so noob explanetion would be nice. thank you. Also do you have any tips what to do if i dont want when i toogle a widget like mounts to the inventory widget been close ?
Concerning best practices, you should only use canvas panels when you really need to. In most cases you should favor overlays and use child widgets to arrange things. Like so many other things in Unreal, the easy/nooby way of doing things isn't really going to affect performance in a small tutorial project, but at production scale can start causing problems. Best to get in the habit of setting things up to scale early on (within reason of course, but in this case it's not a lot of extra work).
I am unable to find an answer to this question, How can you control the visibility of only one component inside a widget/canvas. My example has a text that I need to appear when I get close and a progress bar underneath it to only appear as I press E, I first had them separated into two different widgets which worked great until I zoom in game and the distance between the two changes depending on proximity. I added the progress bar into the same widget to have it distanced properly and I am unable to control or even get access to the progress bar object from a blueprint to toggle visibility seperately. Any help is appreciated.
At 30:18 you are showing bad thing. HUD already has Owned Player Controller and it will be instantiated after local player controller, so it is okay to subscrube on player controller events from HUD class intead of dirty hacks. @Kekdot, what do you think about that?
Just because the menu is not in the viewport, and not ticking, this doesn't mean it isn't using resources. It it's loaded it's load Plenty of widgets don't even use tick
Great Tutorial. I have one doubt. What about options, selection menu where game needs to switch from one Widget to another. How will i control that, Macro you create is not callable in Widget Graph. how will I switch between widgets from widget?
Using a delay node to cast a variable seems like a really bad practice. What happens if your defined timeout works now but one year into development is not enough time and the cast begin to fail? Do you just manually increase it over time? In this particular case, wouldn't it be better to wait until the player has initialized completely and then cache all these variables? You have the OnPostLogin event in the GameMode that is triggered only after the player has received a player controller and that event returns the player controller, it could then call a "PostInit" custome function in the player controller, for example. There must be other ways to do this caching using events and delegates. I really like your tutorials, some of them have some great points well thought and presented but other tutorials are inconsistent and sometimes even go against previous ones were a particular subject was better explained and closer to what the right solution or approach must be. Keep up the good work and thanks for sharing your knowledge!
Yea, sometimes getting an error is a good thing, especially for critical classes like player controller. Making a fail safe with a delay that can timeout sounds like something you never want to do. If I have a class that if it fails, bunch of the things in my project would not work, do I ever want to have timeout and just let it be?
I see "hood class" in the time lien. I'm like Oooooo. What's that? Never heard of that before then as soon as you say the word I just wish I could slap YT.
I followed the tutorial but I instead wanted to switch between the playerUI, PauseScreen and Deathscreen. I made a FlipFlop to alternate between my Pausemenu and PlayerUI (I'm just trying to swap between the active widgets). I can open the menu but why can't I close it?
Very good explained Video. But since i do all exactly like this all my progressbars only works on server and nomore on client side😢 Please give me an answer to that. I'm on your Discord but nobody's answering me there either! I just can not manage it. Either the progress bar only works on the server side or only on the client side. No matter how I turn it. I'm really getting desperate and giving up! That really takes the fun out of programming.
Hey, I could't figure out what's the point of trying to cast to our custom HUD class several times in a row. Like, is there such a great difference in time between the creation of Player controller and our HUD class? If there's not, then it's us who didn't set the proper HUD class, and hence nothing will change in runtime, hence it's pointless to check. So why are we doing this? 🙃
Hi, what should i do in case if i have multiple pawns and each one of them can dispaly information using same widget. Should I create one widget per pawn and add to array, or should I create one widget and then regarding which pawn I click populate widget with data of given pawn?
How would this sort of thing handle some sort of UI that should be seen on every client, like a ping in the world space, or overhead healthbars? Since the HUD class is always run on the client, would those things become impossible without an additional class?
The HUD class as the name intends is only intended for the Heads up Display of the player. So basically only the 2D UI that an individual player sees. In case you wish to use world UI then basically spawn an actor that has a UI component attached to it set to either screen or world space. Checkout my player name above character head tutorial.
@@Kekdot My main menu wasn't appearing until I set a custom event to create all the widgets, then called the custom event from the main menu level on beginplay. Begin play wasn't hitting in the HUD class.
As a ue noob but expeirenced programmer, I can say that calling things like "Get Owning Player Controller" separately every time you need it must be a bad practice. As even if it get's a local variable, it must still be a more heavy function to run than to just run it once and save it as a local variable.
Hey Kekdot, I implemented your BP Macro Library in Unreal 5.3 and I'm getting this error: "Delay generated from expanding Get BP Game Mode 01 contains a latent call, which cannot exist outside of the event graph". Did something change in the newest version of Unreal? When I change the Delay node to something else I no longer get the error but I cannot find a suitable replacement for delay. Set Timer by Event or Set Timer by Function don't seem to work very well in macros.
@ilollipop1009 how do you get a working healthbar with this system? No matter how I do it, I only get the progress bar to run on the server side. But the hud for the progress bar is also shown to me in the clients. They just don't work.
Hi there Kekdot. I'm desperate. For some reason my widgets are not being activated when packaging the game in shipping configurarion. There's just little information about this Idk who else could help me.
it does still exist. If you look under the utlity category you'll find it. It indeed wont find if you type: Do N. But it does exist, open the blueprint functions and look carefully
Hi I have a question, the system is really great, but my concern is that I want to create a main menu but it does not work. Because for the main menu I have to create another level than the base level game, and I think it messes with everything. So what would you do ? Sorry if I did not explain well I am very confused as well :)
@@Kekdot Yes, I'm using it in a production that has just started. There are a few subtleties that I don't fully understand yet, but it's really well done for focusing on the right widgets at the right time, and controller support is very well implemented.
Thats good to hear. I myself have found it to be more bottlenecking and lacking of options and hence created my own setups that serve my needs well. Good to hear that you do find it handy to works with. Do you work with blueprints or cpp? In blueprints I experienced quite a bit of difficulties working with the plugin.
@@Kekdot I'm currently implementing the core systems in C++, and 80% of the game remains in Blueprint to iterate more quickly. There will likely be a pass at the end to optimize and convert the performance-heavy Blueprints to C++ if necessary.
very nice video dude if could put like 10 likes I will have done it🙂. the first time I watch a long tutorial video on RU-vid without getting bored. thank you
@ilollipop1009 how do you get a working healthbar with this system? No matter how I do it, I only get the progress bar to run on the server side. But the hud for the progress bar is also shown to me in the clients. They just don't work.