Coming from web development, was looking for something like this from the beginning to prevent bloating the project with copy-pasted blueprints. Thank you!
If you Can't see the varibales in the Child Actor. Than click on the gear above the varibles section next to My Blueprint. Then click at show inherited variables. They seem to have changed this in some UE 5 version so you can't see them by default.
After binge watching UE5 tutorials for the last 4 days straight, this is by far the best one I've come across. The objective is demonstrated and each step is explained clearly from start to finish. I hope you decide to make more because you're an incredible teacher.
I've been an O-O programmer since O-O was new (yes, I'm that old). WHat I didn't know was that UE even supported these concepts outside of C++ classes. Thank you for taking the time to help us programmers get on board with UE!😀
This is actually the best Unreal tutorial video I have ever seen! The fundamentals covered are the most helpful descriptions I have ever heard. Thank you so much!
your videos are so good. OVer weekend someone challanged me to write a game and i decided to pick up unreal and your videos are making whole journey fun and easy!
Wow this was very valuable, as a noob in Unreal Engine I knew I needed something like this but didn't know what it was called. I just found out what it was by pure chance by reading in the blueprint editor and googled the word.
this was literally me 2 days ago, haha. It's so satisfying especially as a non coder who is just now getting into it the last few months. It's all starting to click
Thanks man, just started my first real attempt at a personal project and coming from a java programming background certain things are missing or are obfuscated when using blueprints. Leaning into events seems to be the way to go, and your vid helped me get a grip on how to do that.
Nice and informative tutorial. I missed - why for example the bronze shield is "Data Only Blueprint/Class" and not "normal" child class? I didn't notice you actually set it like that.
Data only classes ARE child classes, that don't have any custom code directly implemented into them. All of the functionality is on the parent, and you simply edit the variables or data. You don't actually "set it" to be data only. If you make a child class of something and don't add any code, it's automatically a data only class - with the exception of the bug i mentioned where you for some reason have to delete the construction scripts parent call to make it show up like that.
I like how you explained this in very digestible terms. I'm new to UE5, and wonder if applying a blueprint interface is essentially the same, and if not when one would use that vs a child BP. Thank you.
BPC is Asset, Button 'Save' is saving changes in your asset, so if you only compile changes, it is only mean that it is requiring UE run the compiled changes (but compile is only in code, not editor, changes on editor details is not of compile, it likely that you requiring that UE should run on changes of details, but it is not yet be write into code, remember BPC is code asset + data asset + value asset) of your asset on editor runtime and workflow (but these changes not yet be saved because you not yet press button save for changes), likely UE track all changes and run on changes (but not yet changes are saved). Changes on Details is not change to compiled code until you save it, this is hell. Maybe Unreal 5 make it clear that compile is only compile code changes, while changes in Tab details is not, when you save it, it mean that compiled code would be save and changes in details is saved. My hypothesis that UE5 separate 3D Asset (you see on Tab Component) with Code Class Asset (in form of Event Graph and Graph Form) and Value Asset. Or you must press Button Save First and Compile After or Button Compile First and Save After, or to make it sure Save (goal to save changes in Details Tab) - > Compile (Code) - > Save (ALL)
The instanced variable 'Color' is not appearing on 'My Blueprint panel' of 'Base Shield BP'. But can be visible and accessible in 'Class Default' Details Panel. What might be the reason Sir?
I have one single main Blueprint class and multiple Blueprint Child for that Parent Class. When a event in Parent Class is run it is directly going to all the child. How to use the event defined in Parent Class to be applicable to only the interacted the instance of BP Child.
It’s effecting all instances of the children in the world? That shouldn’t happen, and by default it should just be effecting the child you’re interacting with. Are you doing something along the lines of “get all actors of class”? I would need to see your code. You can join my discord and message me if you need more help
Hey Tyler Thank you very much for your quick response. I have got the solution and the script I designed is working as intended. I usually use " get all actors of class" while definition of events and calling them in UI.
This is fine if you know exactly what sounds your using and never intend to add more on the fly, otherwise you'd just be making more work for yourself, as you'd have to go in, add to the enum, then add the sound to the select node, rather than just plugging in the new sound to the sound variable. I did something similar to what your describing in a project where we needed an ambient music player. We had our tracklist and it was never going to change so i just had an enum to select which sound.
thanks for this video, i think i know what I need todo now. i was searching and planning to create a way to use pcg to add blueprints of shelves into shops based on shop type, with items that could be interacted with. individually most of those subjects are covered in various videos, so I was trying to plan and make my own system, but searching for a way to do it in one was not working well. i feel like inheritance was missing from my plan, and if I restructure around this it should work. thanks.
Good question, truthfully, i'm not sure to what extent this effects FPS/Optimzation. I've never noticed one way or the other. It's moreso about making systems that are modular and scalable. But this definitely will prompt me to look into it.
I have a weird question for you. In my game I have a BP_GunBase. When the player interacts with it the gun will go through a data table with what ever name I give it (instance editable public variable I can change on the children) And out of the data table is the struct that holds all the info of the gun (fire rate, animations, ect ect...) This strut is passed into the player and I add a gun component to the player and pass the strut in there. (So I can have all the gun script in one area) I pass all the info using Blue print interfaces. Now time for the question. When ever I change that strut, add/remove variables or change default values, I have to go through and recompile whatever class has that strut. For some reason This also means all the children classes too. Instead of only compiling the parent gun blueprint I need to open every child of that class and compile those too. Completely negating an entire reason I wanted to use this system. Any thoughts? Is it because I have the child guns in the level?
Editing structs that are in use can be a pain and usually causes stuff like this, but there is a sort of trick - first, before editing the struct save your work, next edit the struct but do not save anything other than the struct after you edit it. Finally, restart the editor. This usually works for me.
I'm wondering: If you throw your Collectable Base into the world, you got an instance of that, which is similar to a child. Most of the changes you made in this video could be done on instances and thus create different collectables: You can expose variables and change them, change color, mesh etc. Is there anything wrong with that? Of course, if you wanna change code, it's a bit more tricky, but you could include code for different types of instances in the parent as well. This way you wouldn't have as many blueprints in the database.
There's a few reasons why I wouldn't do this. A) You're going to be cramming a ton of code into one blueprint to account for a ton of different items, which is bad programming practice. In general, we want to seperate concerns as best we can. B) If you make an edit to the class defaults of the object, its going to change it for all of the instances in the world too. C) Management of all of your items is actually easier imo when you have actuall classes for them. Otherwise, certain instances of your items only exist in the world. For example, say you have different guns. You want to add more pistols to the world. There's no pistol class in your content browser because everythings based on a single class. So you have to go into your world and either edit an instance of that class to get a pistol, or duplicate an already made one. D) If you have different levels, again, you're going to have to recreate all of the custom instances you made. Basically overall, youll wind up with a lot less flexability at really no gain. If all you're doing is something like having 3 different shield tiers, where they give you a different shield value and have a different appearance, this approach isn't *terrible*, but I still wouldn't even do that. If you have things that do vastly different stuff, ie. shields and coins, I would highly advise against making those instance of a single class. Cause now you're going to have to add a bunch of checks to that class to determine if its a coin or a shield, and thats just bad.
@@TylerSerino Thanks for the detailed answer. As a beginner it’s not easy to get a feel for these things. The cases you describe make a lot of sense, if you want to access for instance just the shield class. I guess, I should’ve mentioned in my question that I’m refering to NPCs. I’m wondering, whether I should create children of the NPCBase or use the world instances. I can’t see what additional subclass they would require. In any case I’m gonna have to create a few more database items for them for certain special events (NPC specific) that would happen if you interact with them. I wanna either store them in the children classes or in additional separate components.
@@IndependentArt I typically make an NPC base class then go from there. It really depends on your game. For example, for something more complex, Ill subclass the character class, make a BaseNPC class that has any values every single NPC in the game will have (ie character name). Then I can sublcass that and create a base friendly, base neutral, base enemy
Something that has become increasing obvious to me the Mir ei learn about UE5, is that you need a solid understanding of the core concepts of OOP (in a language like C++, C# ir Java) before you get to use Blueprints. Or at least it will save you so much time you already have the OOP mindset.
I agree that a solid understanding of those concepts will most likely help significantly. However, for me it was a bit the opposite. I had studied c++ prior to unreal but really struggled to grasp most of the concepts. It wasn’t until I started using blueprints that those c++ concepts became much more clear. I don’t think it was necessarily blueprints themselves, but just the fact that I could see them being applied in an actual setting, rather than through abstract examples demonstrated via a c++ console program.
@@TylerSerino oh, kinda like visualizing them right? Makes sense too :) Some people are more "language/abstract oriented" others use visual cognitive routes when solving problems
BUT I Don't see you save it, likely the asset you see as saved asset is not save, I think that UE5 is run on changes (transient, but not yet save) and behave as version of 'saved' - but this asset is not yet saved. If changes if you created but you only compile it and you close tab, tracking of changes is auto discard, I see that you closed asset not yet saved (and UE5 still running on changes tracked but it miss the closed, and got bug here????). Maybe Save and Compile is context on different Tabs, tracker maybe make change reflections on both thumbnail and on level, because you not yet close tabs and not yet discard changes, unless you close tab with unsaved, changes is discard. I see you 'save all' of content browser, I don't see tracker is showing of the base BP, meaning that it is discarded because you closed it with unsaved. So My conclusion that Save and Tracking Changes is work on still-open Tabs, if you close Tab, it is auto discorded changes if you forgot save, or leave unsaved with close
Would need more details, Accessed none typically means you have a variable with no value set that you're trying to do something with. IE if you have an actor variable and you try to plug it into a get world rotation node, but you don't actually have an actor set, itll give you that error. And thank you!
At 22:13, the get current shield gives me the "accessed" error. I figured that i had not set the shields from the start but i have tried setting it on begin, and in construction. The printscreen shows the set shields, but wont count up if i pick them up. (the collision is working, but gives this error in BP_BaseShield . And thanks again, i really appreciate you taking your time, was not expecting an answer this quick (or at all) @@TylerSerino
It's not the video theme, but why not to use the HUD, instead of print string on every tick ? didn't finish the video, but for first 10 minutes, great explanations, after the finish I will edit the comment =)
Coming from web development, was looking for something like this from the beginning to prevent bloating the project with copy-pasted blueprints. Thank you!
If you Can't see the varibales in the Child Actor. Than click on the gear above the varibles section next to My Blueprint. Then click at show inherited variables.
They seem to have changed this in some UE 5 version so you can't see them by default.
thank you so much !!
thank you!
After binge watching UE5 tutorials for the last 4 days straight, this is by far the best one I've come across. The objective is demonstrated and each step is explained clearly from start to finish. I hope you decide to make more because you're an incredible teacher.
I've been an O-O programmer since O-O was new (yes, I'm that old). WHat I didn't know was that UE even supported these concepts outside of C++ classes. Thank you for taking the time to help us programmers get on board with UE!😀
Man, your unreal tutorials stand out. Wish you all the best.
This is one awesome tutorial. Really needed to brush up on inheritance and you were super thorough
This is actually the best Unreal tutorial video I have ever seen! The fundamentals covered are the most helpful descriptions I have ever heard. Thank you so much!
You're truly a master! I been looking for a vod wich explains this programming concept and every second that you explained is legit a great value
Thanks! Really helpful overview and implementation 🦾🦾
Wow thank you so much!! I’m glad you found it helpful!
your videos are so good. OVer weekend someone challanged me to write a game and i decided to pick up unreal and your videos are making whole journey fun and easy!
God, I wish every teacher was this efficient. Thank you!!
Thanks for those amazing tutorials. You explain concepts with the greatest clarity!
Wow this was very valuable, as a noob in Unreal Engine I knew I needed something like this but didn't know what it was called. I just found out what it was by pure chance by reading in the blueprint editor and googled the word.
Thank you very much for the tutorial! Now I understand it better. I have to admit that you explain things very clear👀
this lesson is really amazing! You are a very very good teacher!
This video is immensely useful, thanks a lot
I heckin’ love unreal engine! 😄
I’m getting it! I’m starting to get object oriented programming
this was literally me 2 days ago, haha. It's so satisfying especially as a non coder who is just now getting into it the last few months. It's all starting to click
Thanks man, just started my first real attempt at a personal project and coming from a java programming background certain things are missing or are obfuscated when using blueprints. Leaning into events seems to be the way to go, and your vid helped me get a grip on how to do that.
Amazing content! Thanks for sharing
Thank you for another tutorial. You explain and teach things really good 👍
Thanks!
Thank you so much!! Glad to help!
Dispatcher could send its message to umg widget or maybe whole blueprint type system ?
Amazing tutorial!
Nice and informative tutorial. I missed - why for example the bronze shield is "Data Only Blueprint/Class" and not "normal" child class? I didn't notice you actually set it like that.
Data only classes ARE child classes, that don't have any custom code directly implemented into them. All of the functionality is on the parent, and you simply edit the variables or data. You don't actually "set it" to be data only. If you make a child class of something and don't add any code, it's automatically a data only class - with the exception of the bug i mentioned where you for some reason have to delete the construction scripts parent call to make it show up like that.
I like how you explained this in very digestible terms. I'm new to UE5, and wonder if applying a blueprint interface is essentially the same, and if not when one would use that vs a child BP. Thank you.
BPC is Asset, Button 'Save' is saving changes in your asset, so if you only compile changes, it is only mean that it is requiring UE run the compiled changes (but compile is only in code, not editor, changes on editor details is not of compile, it likely that you requiring that UE should run on changes of details, but it is not yet be write into code, remember BPC is code asset + data asset + value asset) of your asset on editor runtime and workflow (but these changes not yet be saved because you not yet press button save for changes), likely UE track all changes and run on changes (but not yet changes are saved). Changes on Details is not change to compiled code until you save it, this is hell. Maybe Unreal 5 make it clear that compile is only compile code changes, while changes in Tab details is not, when you save it, it mean that compiled code would be save and changes in details is saved. My hypothesis that UE5 separate 3D Asset (you see on Tab Component) with Code Class Asset (in form of Event Graph and Graph Form) and Value Asset. Or you must press Button Save First and Compile After or Button Compile First and Save After, or to make it sure Save (goal to save changes in Details Tab) - > Compile (Code) - > Save (ALL)
The instanced variable 'Color' is not appearing on 'My Blueprint panel' of 'Base Shield BP'. But can be visible and accessible in 'Class Default' Details Panel. What might be the reason Sir?
Did you turn on “show inherited variables” in that panel?
Ohh Sorry Sir. I wasn't aware. Thank You.@@TylerSerino
Wanna make a remark that bp_"collect" but vars name with "pickup". For me its little nervous
I have one single main Blueprint class and multiple Blueprint Child for that Parent Class. When a event in Parent Class is run it is directly going to all the child. How to use the event defined in Parent Class to be applicable to only the interacted the instance of BP Child.
It’s effecting all instances of the children in the world? That shouldn’t happen, and by default it should just be effecting the child you’re interacting with. Are you doing something along the lines of “get all actors of class”? I would need to see your code. You can join my discord and message me if you need more help
Hey Tyler
Thank you very much for your quick response.
I have got the solution and the script I designed is working as intended.
I usually use " get all actors of class" while definition of events and calling them in UI.
I wonder of maybe using an enum in the base class to pick a sound using a select. Then just set the enum in each child.
This is fine if you know exactly what sounds your using and never intend to add more on the fly, otherwise you'd just be making more work for yourself, as you'd have to go in, add to the enum, then add the sound to the select node, rather than just plugging in the new sound to the sound variable. I did something similar to what your describing in a project where we needed an ambient music player. We had our tracklist and it was never going to change so i just had an enum to select which sound.
thanks for this video, i think i know what I need todo now. i was searching and planning to create a way to use pcg to add blueprints of shelves into shops based on shop type, with items that could be interacted with. individually most of those subjects are covered in various videos, so I was trying to plan and make my own system, but searching for a way to do it in one was not working well. i feel like inheritance was missing from my plan, and if I restructure around this it should work. thanks.
Is the game being more optimised for fps with way?
Good question, truthfully, i'm not sure to what extent this effects FPS/Optimzation. I've never noticed one way or the other. It's moreso about making systems that are modular and scalable. But this definitely will prompt me to look into it.
Alrighty :) @@TylerSerino
I have a weird question for you. In my game I have a BP_GunBase. When the player interacts with it the gun will go through a data table with what ever name I give it (instance editable public variable I can change on the children) And out of the data table is the struct that holds all the info of the gun (fire rate, animations, ect ect...) This strut is passed into the player and I add a gun component to the player and pass the strut in there. (So I can have all the gun script in one area) I pass all the info using Blue print interfaces.
Now time for the question. When ever I change that strut, add/remove variables or change default values, I have to go through and recompile whatever class has that strut. For some reason This also means all the children classes too. Instead of only compiling the parent gun blueprint I need to open every child of that class and compile those too. Completely negating an entire reason I wanted to use this system.
Any thoughts? Is it because I have the child guns in the level?
Editing structs that are in use can be a pain and usually causes stuff like this, but there is a sort of trick - first, before editing the struct save your work, next edit the struct but do not save anything other than the struct after you edit it. Finally, restart the editor. This usually works for me.
I'm wondering:
If you throw your Collectable Base into the world, you got an instance of that, which is similar to a child.
Most of the changes you made in this video could be done on instances and thus create different collectables: You can expose variables and change them, change color, mesh etc.
Is there anything wrong with that?
Of course, if you wanna change code, it's a bit more tricky, but you could include code for different types of instances in the parent as well.
This way you wouldn't have as many blueprints in the database.
There's a few reasons why I wouldn't do this. A) You're going to be cramming a ton of code into one blueprint to account for a ton of different items, which is bad programming practice. In general, we want to seperate concerns as best we can. B) If you make an edit to the class defaults of the object, its going to change it for all of the instances in the world too. C) Management of all of your items is actually easier imo when you have actuall classes for them. Otherwise, certain instances of your items only exist in the world. For example, say you have different guns. You want to add more pistols to the world. There's no pistol class in your content browser because everythings based on a single class. So you have to go into your world and either edit an instance of that class to get a pistol, or duplicate an already made one. D) If you have different levels, again, you're going to have to recreate all of the custom instances you made. Basically overall, youll wind up with a lot less flexability at really no gain.
If all you're doing is something like having 3 different shield tiers, where they give you a different shield value and have a different appearance, this approach isn't *terrible*, but I still wouldn't even do that. If you have things that do vastly different stuff, ie. shields and coins, I would highly advise against making those instance of a single class. Cause now you're going to have to add a bunch of checks to that class to determine if its a coin or a shield, and thats just bad.
@@TylerSerino Thanks for the detailed answer. As a beginner it’s not easy to get a feel for these things.
The cases you describe make a lot of sense, if you want to access for instance just the shield class.
I guess, I should’ve mentioned in my question that I’m refering to NPCs.
I’m wondering, whether I should create children of the NPCBase or use the world instances. I can’t see what additional subclass they would require.
In any case I’m gonna have to create a few more database items for them for certain special events (NPC specific) that would happen if you interact with them. I wanna either store them in the children classes or in additional separate components.
@@IndependentArt I typically make an NPC base class then go from there. It really depends on your game. For example, for something more complex, Ill subclass the character class, make a BaseNPC class that has any values every single NPC in the game will have (ie character name). Then I can sublcass that and create a base friendly, base neutral, base enemy
Something that has become increasing obvious to me the Mir ei learn about UE5, is that you need a solid understanding of the core concepts of OOP (in a language like C++, C# ir Java) before you get to use Blueprints. Or at least it will save you so much time you already have the OOP mindset.
I agree that a solid understanding of those concepts will most likely help significantly. However, for me it was a bit the opposite. I had studied c++ prior to unreal but really struggled to grasp most of the concepts. It wasn’t until I started using blueprints that those c++ concepts became much more clear. I don’t think it was necessarily blueprints themselves, but just the fact that I could see them being applied in an actual setting, rather than through abstract examples demonstrated via a c++ console program.
@@TylerSerino oh, kinda like visualizing them right? Makes sense too :)
Some people are more "language/abstract oriented" others use visual cognitive routes when solving problems
BUT I Don't see you save it, likely the asset you see as saved asset is not save, I think that UE5 is run on changes (transient, but not yet save) and behave as version of 'saved' - but this asset is not yet saved. If changes if you created but you only compile it and you close tab, tracking of changes is auto discard, I see that you closed asset not yet saved (and UE5 still running on changes tracked but it miss the closed, and got bug here????). Maybe Save and Compile is context on different Tabs, tracker maybe make change reflections on both thumbnail and on level, because you not yet close tabs and not yet discard changes, unless you close tab with unsaved, changes is discard. I see you 'save all' of content browser, I don't see tracker is showing of the base BP, meaning that it is discarded because you closed it with unsaved. So My conclusion that Save and Tracking Changes is work on still-open Tabs, if you close Tab, it is auto discorded changes if you forgot save, or leave unsaved with close
First: I get an "accessed none" error, any ideas what can be wrong? (and second: thanks for excellent tuts!)
Would need more details, Accessed none typically means you have a variable with no value set that you're trying to do something with. IE if you have an actor variable and you try to plug it into a get world rotation node, but you don't actually have an actor set, itll give you that error. And thank you!
At 22:13, the get current shield gives me the "accessed" error. I figured that i had not set the shields from the start but i have tried setting it on begin, and in construction. The printscreen shows the set shields, but wont count up if i pick them up. (the collision is working, but gives this error in BP_BaseShield . And thanks again, i really appreciate you taking your time, was not expecting an answer this quick (or at all) @@TylerSerino
It's not the video theme, but why not to use the HUD, instead of print string on every tick ? didn't finish the video, but for first 10 minutes, great explanations, after the finish I will edit the comment =)
In a real scenario you would absolutely use the hud/umg. Just wanted to focus on the topic in this video
@@TylerSerino like and subscribe, need more stuff like it, you did a great tutorial !
damn, i learned a lot
I should watch this first time touching blueprint
👌
1000th 😎
i love u
A comment for the algo, sir.
MONTH LONG GAME JAM