Your videos came as an angel for me after YEARS of struggling with UMG... I was always solving UI as fast as possible to continue with other areas more gameplay related... Thank you so much for sharing the files, you earned a sub and you will be the first person I do Patreon!
@karlbovski16566 сағат бұрын
Hey, thank you for the video!! Since the docs about UMG Viewmodel explain the concepts (which are simple to understand), the implementation can be tricky. Your video gave me a lot of information but also a lot of questions (for example how to handle Data Assets widgets). Would you be so kind as to make a short video with a step-by-step tutorial on implementation? Thanks again✌
@JumpCatStudio1026 күн бұрын
what is the tool to take note at 11:46 ?
@combycat7 күн бұрын
In this system would it be possible to make a thing such as an inventory system that has little item slots that could be dragged into other things?
@AmrMakesGames6 күн бұрын
Yes, you can do draggable widgets like you'd do in other systems. But this is not included in the system out of the box currently
@codymccarty932717 күн бұрын
at 17:25 there are some stats on the screen. How did you do that? I tried a few stat commands like stat UI, stat Slate, RHI, SceneRendering, GPU, but they don't look like that. I also tried googling, but couldn't find anything. Any help? Thanks!!
@AmrMakesGames17 күн бұрын
Sorry, I should've pointed that out. It's stat DrawCount
@nreenvoice544819 күн бұрын
Very useful!
@sherifhany38621 күн бұрын
What a great tool
@LearnAWSCloud22 күн бұрын
Hi, how does this system do the ordering of the layers? You mention a pop-up can hide the other layers from the viewport, how did that happen? I suppose you could take the Tops of the other layers and hide them.
@AmrMakesGames21 күн бұрын
hi there and good question, The primary layout widget handles that, it is simply an overlay and the layers are ordered inside it. And you're correct, that's one way to hide other layers, we can either hide the top of the layer, or hide the layer itself. The system in the video is simple, and needs more utility functions like hiding other layers, handling fading in and out, etc., but it's a good starting point to build upon.
@LearnAWSCloud20 күн бұрын
@@AmrMakesGames Got it, okay thanks
@sherifhany38622 күн бұрын
Greetings from Egypt
@AmrMakesGames22 күн бұрын
يا مرحب بابن بلدي يا مرحب
@sherifhany38622 күн бұрын
Just as i discover your channel you post, this is a good day, I love your content and I'm looking forward to watch more of your high quality content <3
@AmrMakesGames22 күн бұрын
Welcome abroad, Sherif, and I'm glad you love my content!
@biiggtr22 күн бұрын
جامد جدا وسلاسة الشرح جميلة جدا
@AmrMakesGames22 күн бұрын
طالما سلاسة الشرح جميلة يبقى انا اتعلمت من الفرجة على فيديوهاتك الجميلة يا زياد 🙏
@biiggtr22 күн бұрын
@@AmrMakesGames يعم متقولش كدة دة احنا نتعلم منك يا استاذ عمرو
@txu201125 күн бұрын
Is there a difference between a Viewmodel and a singleton? The reason why I ask is because the core idea of they can only have one sounds similar
@AmrMakesGames22 күн бұрын
Sorry for the confusion, a viewmodel can be created in multiple instances and doesn’t need to be one only. The example we discussed at 06:00 is just for consistency and performance because they all read the same source of data. On the other hand, a singleton would be something like the MVVM subsystem, which is a single global instance.
@txu201122 күн бұрын
@@AmrMakesGames Do all instance still refer to the same variable?
@AmrMakesGames21 күн бұрын
In that example, yes
@MystMagie25 күн бұрын
Amazing system! Managed to implement it in my projec. However, I can't figure out how to plug an item pickup widget with this system. The item pickup notification widget is a modal, but it gets added to the gamescreen widget, inside a vertical box, via a function that also passes the item data (name, quantity etc). How to use your system in that scenario?
@AmrMakesGames21 күн бұрын
One thing you could do since only one widget can be visible in a layer at a time, is to push the item pickup modal to the Modal layer, since it is a modal. Then, in your game screen where you have a vertical box of items or the inventory, your pick up modal will communicate with inventory widget to add an entry, and then you pop it from its Modal layer. please let me know if something is not clear
@txu201127 күн бұрын
What was your intent to have both C++ VM_health and a VM_health blue print? Are they connected? Or are you just showing how to do both?
@txu201127 күн бұрын
In general, I think there is a gap between the project and some understanding how this works. I might look up more viewmodel examples to help understand this.
@AmrMakesGames26 күн бұрын
Yes, mainly showing both ways, and looking into how MVVM works in general can help you understand it even better. But if you've any questions, please don't hesitate to ask.
@LearnAWSCloudАй бұрын
thanks
@codymccarty9327Ай бұрын
This is top-notch quality stuff. Keep it up! 5:16 stack trace on warning. and break on exception right after 8:05 rename exec functions Something I've found useful is FAutoConsoleCommand. exec functions can't be called from any class, but cvar callbacks can. Here's two examples in an Actor Component that goes on a player controller: static FAutoConsoleCommandWithWorld DebugSandActorComp(TEXT("Sand.Debug.ActorComp"), TEXT("Debugs the clicked Actor's SandActorComp"), FConsoleCommandWithWorldDelegate::CreateStatic(&USand_PControllerComp::RunDebugSandActorComp)); static FAutoConsoleCommandWithWorld DebugSandJoinPlayerFaction(TEXT("Sand.Debug.JoinPlayerFaction"), TEXT("The clicked Pawn will join the Player's Faction"), FConsoleCommandWithWorldDelegate::CreateStatic(&USand_PControllerComp::RunDebugSandJoinPlayerFaction), ECVF_Cheat);
@drumandbassob0007Ай бұрын
great talk , this should help me convert lyra to first person i dont know why epic made this very big deep sample but made it really hard to add first person
@AmrMakesGamesАй бұрын
Yes, it is complex to a high degree, but if we compose down to its components and explore the different llugins and features it uses individually, you'll find how flexible it is. For first person, if you haven't figured it out already, simply understanding how camera modes work in Lyra should make it a little simple for you
@drumandbassob0007Ай бұрын
@@AmrMakesGames yer its a complex system i have first person working now with arms and hidden TP mesh but think i might have to make my own weapon system as lyra has hard refs to all the weapons instead of soft refs and also every time you change weapon it destroys it and respawns it which is a really bad way to do it , it might be alright for single player but for multiplayer its not very good
@txu2011Ай бұрын
I checked out your project and I see that the health amount is data binded to the viewmodel. Is it optimized because the view model won’t fire every frame but only when the view model is called?
@AmrMakesGamesАй бұрын
Exaclty. It is similar to using event dispatchers, but with an extra advantage that UI won't be coupled to the source of the data, and only to the view model.
@disowneddog7890Ай бұрын
TYSM! The frontend in Unreal is really killing me!
@txu2011Ай бұрын
Another question, when I try to implement the same system with pause screen to my game, I use the same setup but the pause screen won't allow me to have keyboard inputs anymore, why is that?
@txu2011Ай бұрын
ahhh, I just found out to make a key actionable during pause, I need to enable "Trigger When Paused" on the action. Mind blown
@fahimjaowad8717Ай бұрын
Thank you so much Amar. I had a question, what if I wanted to have two widgets of the same tag in a layer. Is it possible via your system?
@AmrMakesGamesАй бұрын
You're welcome Fahim. Possible yes, but may I know what you're trying to do so I can give you a more detailed answer? Currently each layer has a unique tag, this is the idea of using gameplay tags. And each layer can have one Widget active a time, since a layer is a stack of widgets. You can add more layers with more tags, and these layers are all shown simultaneously, but it's rare that you would need many of those. If you need two widgets to show in the same layer, then simply one widget should contain both of them and be pushed to the layer's stack.
@fahimjaowad8717Ай бұрын
@@AmrMakesGames thanks! Makes sense. Just like you merged the weapons and health UI.
@txu2011Ай бұрын
Hi, what does "FocusGame" and "FocusModal" do on your main player controller? They look important however I don't understand the intent of them. Anything I should read more about to understand them better? Thanks
@AmrMakesGamesАй бұрын
Hi there, they're a very simple handling for UI Input focus. Focus Modal makes UI consume input and blocks it from passing to the Game. So, if you have a pause menu open for example, pressing WASD would move through the menu instead of moving the player. Focus Game does the opposite and allows input to pass to the game. This is a very simple implementation though; some work is required by widgets to specify what element should get focus. I recommend you take a look at How Slate handles input routing.
@txu2011Ай бұрын
Will do!
@txu2011Ай бұрын
@@AmrMakesGamesI see that you use common user widget in the example project, would you switch to common activiatable objects instead to achieve what you said?
@AmrMakesGamesАй бұрын
@@txu2011 definitely would do, along with other common ui features. This example was meant to be simple and avoid the overhead of common ui.
@RobertBrown-u2xАй бұрын
9519 Meagan Locks
@fahimjaowad8717Ай бұрын
A video on the subsystems workflow you mentioned here would be a godsend. Please do one if you have time.
@AmrMakesGamesАй бұрын
Will plan a more thorough video with a more sophisticated system that manage pop-up requests and UI input soon hopefully!
@ZakariaAlMoktarАй бұрын
فيديو اسطووووووووووووووووووري شكرا مليار مرة 👑👑
@AmrMakesGamesАй бұрын
عفوا تسلملي 🙏
@biiggtr2 ай бұрын
جامد جدا يا معلم
@AmrMakesGames2 ай бұрын
تسلم يا غالي بنتعلم منك
@GoodguyGastly2 ай бұрын
I hate that im just finding this now in my search for ui tuts in UE. But im thankful im here now 😢
@AmrMakesGames2 ай бұрын
Hope it was useful, and take your time in grasping each point
@gatOlegat2 ай бұрын
Can you share the tool you used for debugging ui invalidation? 10:35
@AmrMakesGames2 ай бұрын
It was slate console variables, I guess I used: SlateDebugger.Invalidate.Enabled 1 SlateDebugger.Invalidate.Start
@gatOlegat2 ай бұрын
@@AmrMakesGames perfect, thank a lot
@KINGDOMSONSTV2 ай бұрын
Very good vid. Thanks for sharing.
@TheGabmeisterX2 ай бұрын
One of the best videos that tackle this topic.
@ryanjdevlin872 ай бұрын
Amazing video man such a great topic ! Please keep making UI videos also man I love ur panel manager is the core of my UMG based UI
@m7amdosama7392 ай бұрын
♥♥♥♥♥
@AmrMakesGames2 ай бұрын
حبيبي ❤️🙏
@revraitah2 ай бұрын
Heya, may I have the discord link for Lyra Dev Net? Thanks!
@AmrMakesGames2 ай бұрын
Here you go: discord.com/invite/bxNVFxhV
@revraitah2 ай бұрын
@@AmrMakesGames Thanks!!!
@Deculayn2 ай бұрын
@arrowsdev2 ай бұрын
yes i would love to see your take on extending the reference viewer tool in unreal engine
@AmrMakesGames2 ай бұрын
Definitely, the upcoming video will touch it briefly, and I'll plan a more detailed one regarding it and dependencies in general soon!
@arrowsdev2 ай бұрын
great topic and great video as usual
@AmrMakesGames2 ай бұрын
Thankful for your support as always bro!
@deogelacio33012 ай бұрын
Sir, i am an author of a literal, educational and compitative game that I intend to ask a game developer to develop this into a mobile game. Pls contact me. Thanks. [email protected]
@9thCrusade2 ай бұрын
is performance between interface abstract component contextsensitive ? i read somewhere that inhereting/interfaces is usually better for performance than component based systems
@AmrMakesGames2 ай бұрын
Good question, yes they're very context sensitive as with anything related to performance. Inheritance can lead to larger object sizes since derived classes inherit all the properties and methods of their parent classes. Interfaces introduce a slight overhead due to the need for method lookup at runtime (similar to virtual function calls in inheritance). However, this overhead is generally minimal. Components add to the memory footprint since each component is typically an object attached to the main entity. However, this overhead can be minimized by designing lightweight components. But we can't say something is more performant than the other without the full context. For example, depending on how components are managed (e.g., using contiguous memory storage), they can be very cache-efficient, leading to better runtime performance, especially in entity-component-system (ECS) architectures.
@ryanjdevlin872 ай бұрын
To add controller support is extremely easy thanks to the way you set this up ! Amazing job man ! This will be the base for my UI for sure ! This is so much easier to understand and honestly this 10 minute video explains the entire system better than the info out there for common UI lol. Thank you for this once again !
@ryanjdevlin872 ай бұрын
Another thing I did to the system was add a always available widget array to the HUD and corresponding layer. This is for widgets like the settings menu and inventory screen we only want to collapse and show. Very well written and much respect for this man your a great programmer ! I would love to do a consulting session sometime about architecture etc. Have a great day man !
@lolaswift1113 ай бұрын
hi does the project file contain a functional animal behavior demo project as shown in your video? Seems to be a horse or something. thanks.
@AmrMakesGames3 ай бұрын
Hi, no, it is not functional, unfortunately, just for demonstration.
@thenetimp3 ай бұрын
Personally I'd put all the color values in a data asset, and then link the data asset to your custom UI widgets, and link the color values in the DataAsset to the UI widgets, this gives you some flexibility to swap out colors quickly and easily to see the contrast between them just by creating a new data asset. Also, your reference to Unity Scriptable Objects. Which is basically a Unreal Engine DataAssets I am not familiar with UMG, so I can't speak as to how DAs could work with them as well.
@AmrMakesGames3 ай бұрын
Definitely, DAs are a great option for styling and theming. This is kinda similar to common UI's style objects like UCommonButtonStyle.
@FPChris3 ай бұрын
Bug. The lock icon does not lock the canvas
@ryandavis75063 ай бұрын
Awesome video - just starting out and this video is exactly what I was looking for. Thank you for sharing!
@Carkoon3 ай бұрын
Do you know if there's a way to also have this functionality in the Rig Graph? I activated the option but it's not available there.
@AmrMakesGames3 ай бұрын
Thank you for pointing it out, I wasn't aware of that, and I believe you can send an issue to Epic. Meanwhile, the only way I know of is to dig into how this context menu button is implemented in the engine code and modify it that it shows on the rig graph.
@Carkoon3 ай бұрын
@@AmrMakesGames I'l look into reporting it to Epic (I'm not knowledgable enough with C++ and the Unreal source code to do any real investigating^^).
@Horizontff3 ай бұрын
Puedes hacer una guía sobre optimizar menús,interfaces???
@AmrMakesGames3 ай бұрын
Hopefully, will make more UI guides soon
@Ayon-55713 ай бұрын
Thanks bro
@عععع-د3ب3 ай бұрын
I hope you make a lesson on the subject of the currency system. I'm working on a game like Subway, but the money that the player collects must be used to buy things. The problem is that I searched KZbin and didn't find a lesson on this subject, nor a project that was stopped because of this. I mean, if the player collects a coin, he must buy something like characters or something else, but there is no explanation...❤❤😢😢
@AmrMakesGames3 ай бұрын
Will consider this one, but in the meantime, and since I'm not experienced with such a system, I believe you'll find many answers if you post on Unreal's dev community or discord servers.
@عععع-د3ب3 ай бұрын
@@AmrMakesGames Thanks
@fluffbunn41753 ай бұрын
This is exactly what I needed, thank you !
@Bloodyteo3 ай бұрын
Moises is that you?
@TorQueMoD3 ай бұрын
This is a great video. Very simple approach to figuring out what sort of system to use.