I am mostly commenting for the algorithm, but your content is of the highest quality for the unreal engine i have come across. Keep up the amazing high-quality content! I love how descriptive you are on the reasons to do each step and its less like a tutorial to get the system into the game and more a tutorial on how to use the tools of Unreal Engine in a logical fashion. Thank you!
Thank you for the kind words! I'm glad to hear that you appreciate the level of detail in my tutorials. I'll definitely keep the high-quality content coming for the Unreal Engine community. Your support means a lot!
Hey, we would love to see an inventory system tutorial series from you man. Watched your smart enemy Ai series and its amazing and the best Ai series so far on UA-cam. Keep up the good work!!!
@@AliElZoheiry please make a tutorial on how to create quick item system. Because there is no such course on youtube or udemy. There are mostly tutorials on how to collect items, how to drop items in the inventory, etc. For example; it would be great to see a system where we can have separate slots where skills and quick-usable items in our inventory can be connected and we can switch between objects in these slots quickly without slowing down the pace of the game. My game I developed has become much better thanks to you. I hope we can meet and work together one day. Sincerely regards
You the first guy I see making a save and load tutorial very clearly I watched the entire video without getting bored. I really want to see more tutorial from you man, Keep up the good work.
Hey! Thank you so much for your kind words and feedback! I'm glad you found the tutorial helpful and engaging. I'll definitely keep the tutorials coming, and I appreciate your support!
I really appreciate that you teach correct design patterns. A lot of channels just go with the naive solutions and don't even allude to a better way existing. I'm right now coming from having written a "quick and dirty" prototype, and going into rebuilding a proper production codebase. Your channel is so perfect for me right now, these are all the exact things I need to be thinking about.
I'm glad to hear that you find my channel helpful. Correct design patterns are crucial for building a robust and scalable codebase, and I'm glad I can provide content that aligns with your needs. Thank you for your feedback and all the best with your codebase redevelopment!
I have been working with Unreal for over 2 years and have seen hundreds of tutorial videos from nearly a hundred creators. This is by far the best tutorial presentation on an Unreal topic I've seen. I don't like comparing people, but if I had to, I'd say that "at last, we've found the Brackeys for Unreal." Well done, sir!
Thank you so much for your kind words and high praise! I really appreciate your feedback and I'm thrilled to hear that you found the tutorial so helpful. Thank you for watching and commenting.
Seen a couple of your tutorials, and just wanted to compliment you on teaching good coding.. Instead of "bad coding for the sake of this tutorial".. Keep up the good work.. Too many creators cut corners with bad practices, which in turn really dosn't teach anything useful..
Really appreciate these tutorials and how in depth you explain things. I like to understand why I'm doing something and not just copy and paste. Keep em coming!
OMG. I finally found someone on YT who is able to provide industry level information. This stuff is very usable and I couldn't be more grateful for this content!
As a gamedev student in the fith term I can't thank you enough! This time we are completly free in choice of the genre and you are an absolute beast explaining things like this! I really hope you continue with the videos man, great work!
Thank you so much for the kind words! I'm really happy to hear that the content has been helpful to you. Best of luck with your game development studies, and I'll definitely keep the videos coming!
Now that was very helpful! Best save/load system explanation I've seen so far. Thank you very much for this tutorial, it really made my work a bit easier.
Another thank you my friend. Spent the weekend revamping my save load system using this method. I had surprisingly few issues given the complexity of my setup. It is a vast improvement. I had function logic in BP_SaveGame and it confused my brain. This is easier to track and follow.
You're very welcome! I'm glad to hear that you found the method helpful. Simplifying the logic and tracking it more easily can definitely make a big difference!
Amazing and brilliant tutorial. one small bug I found is that if I exit and play again on the same checkpoint twice my health would go back to 100%, I am using your damage system btw Edit: Same thing happened to you at 31:52 and 32:59 without you noticing. you are the best UE youtuber out there and thank you for all your tutorials
Hey! Thank you for your feedback and for catching that bug. This indeed happens because as soon as you spawn on checkpoint, it triggers the SavePlayer function, which could occur before the health has been loaded. To solve this, you should simply ignore the checkpoint on spawning (either through a timer, or checking the location)
Look, I’ve been working in unreal for a few years now and I’ve created some decent save and load system but this right here is gold. I never understood why people create save and load method in the player character or game mode 😂😂😂 thank you mate
This was really useful, thanks a lot! A useful addition to this tutorial would be to save things like enemies, their position, health, alert state, if they're dead, etc- especially since you've got your series on enemy AI. The cube position was useful but it feels like this can get really complex really fast.
I'm really glad you found the tutorial useful! Thank you for the suggestion. Saving enemy state and position does indeed add complexity, but it's definitely something worth considering for a future tutorial.
@@AliElZoheiry Just wanted to give an update that I was able to use the information from this video to save / load more complex things like enemies and have them fit back in seamlessly. So the information applies very well! Thanks again for the video, it really was a big help for me and I imagine plenty of other people too.
Comments are good, so here I am because you are great. I am not though, I missed the naming of the SlotName variable at 12:27, it took me 13+ hours of re-playing the vid and some help to figure that out. But I got there! Thank you for your content! It's good to be learning the best ways to do things, instead of the messy ways.
Hey, thanks for your feedback! I'm glad you found the content helpful, and I appreciate your perseverance in troubleshooting the issue with the SlotName variable. Keep up the great work!
thank you! you explained everything wonderfully, and this was so easy to follow and understand. i have been putting off creating a save and load / continue game system for awhile
Good save game tutorial for beginners. If you dont like the spaghetti inside of a function just treat your input variables as if they were local variables. The 2 most important parts of this are: 1 use the game instance, even if the game is multiplayer. 2 create base classes for anything you want to save, so that like the end of this video you put save functions in those base classes.
Had to comment, this level of detailed explanation has been very helpful. Currently, I'm attempting to have the game create a new save slot each time a new game has started and the information of those slots updated in the load game widget. So far it's gone horribly, but I appreciate you showing where the best places to store and retrieve data should live.
Hey there, thank you for your kind comment! Creating new save slots for each game start and handling the information update in the load game widget can be a bit tricky at first. I'm glad the detailed explanations have been helpful, and I'm confident with a bit more practice it will start to come together smoothly. Good luck with your game development endeavors!
Hello ! First of all, I'm verry sorry for my broken English. I'm from Japan. I discovered your channel recently and I think it's great to watch your videos that offer such quality content about UE! Well done and thank you so much for it! I am contacting you because I have started the development of an Horror Escape Game on PC. I'm really not a professional in this area, at all, and I would love to see a tutorial about more complex features and, very importantly, a real save menu. There are many good tutorials in English on the subject, but, I only see videos concerning relatively basic save system which do not take into great consideration the triggers (using do once or destroy actor), the collectible objects which would be picked up in several levels, the passage between several levels, etc. What I would really like to see is a tutorial that deals with and clearly explains, in addition to what we basically see everywhere, more complex save system: - Saves (in different slots) and loading games menu - Check points (with a list of all saved check points in the save menu, with the possibility of reloading them) - Attribute and customize the name off the saves - Interactive elements (saving picked up objects, multiple doors when the state changes from open to closed, etc.) - Spawned and destroyed enemies (so that the trigger or event no longer retriggers after saving / auto-saving) - Inventory - When and how properly use Game Instance and Game Mode (with the differences between sublevels and levels) - The save logic between several levels (not just in a single level) - The save logic in a game with only sublevels - etc... A video like this, with great teaching like yours, would be more than exceptional and unique ! Thanks again for all your videos!
Hey there! Your English is great, no need to apologize. Thank you so much for your kind words and suggestions. I've noted down your ideas for a more complex save system tutorial and will consider them for future videos. I truly appreciate your support and hope to create content that meets your expectations! Thank you for watching and reaching out to me 🙏
7:50 ive been searching for a week for someone to explain this shit the way youre doing. my brain cannot learn if someone else is doing all of the steps(work) for me. i REALLY hope you make more ultimate guides....
Hey, thank you so much for your comment! I'm really glad to hear that my teaching style resonates with you and that you find the explanations helpful. Rest assured, I'll definitely be creating more ultimate guides in the future. Keep an eye out for them!
You are really the best, honestly. Thank you for your videos and dedication to helping persons like myself be better at Game Development using Unreal. It's really appreciated. What I would love to see is a mission/quest system. I know that would be awesome. So the quest system can have for example: Collecting Items Quests (This would be collecting a certain amount of items, either you collect the items for yourself, or you collect the items and give them to another character) Killing Enemies quests (This can be killing a certain number of enemies or killing all enemies that are either spawned or placed in a level. The number of enemies spawned can vary by being random. It would be really awesome to see how to store the data of spawned enemies so that it automatically plugs into the amount that should be killed on that specific mission. That way you could choose whether to have a set amount of enemies killed to pass the mission, kill all the enemies, or the mission could start by saying kill 5 enemies, but then others are spawned and the objective can be updated while the mission is still active to kill those that are spawned as well making the game more dynamic and enjoyable.) Interacting with actors or character quests (This can be to go to someone and then a small dialogue can be played etc, pick up a specific item. That sort of thing. Like at the start of the game, there's an objective to pick up a sword and another objective of the same mission to equip the sword... that sort of thing) Going to a certain location quest (Have the player journey to a specific location in a level) Timed missions (This is where you have to complete any of the four main mission types listed above at a given time... normally you'd have to get to a checkpoint before the time runs out or collect certain items within a certain time) Combined missions: where you could fuse different mission types into one. For example, you could have the player kill enemies within a certain location, if an enemy is killed outside that specific location, it doesn't contribute to passing the mission. My apologies for the long comment, I just wanted to explain what I'd like to see.
Hey Kellow, thank you so much for your kind words and your suggestions. I take all suggestions into account, I put them in a list and prioritize them with each new video, so this is very helpful. Thanks again and I'm glad you're enjoying my videos so far 🙏
Great tutorial. Quick suggestion. Casting is not ideal due to memory impact (though you could argue it could be small in this case). What I did was add a function to the BPI called "GetSaveGameBP" then add the interface to the BP_SaveGame and for that method, reference "Self" then return it for that method. In the GameInstance BP, I call the Save Game that's outputed from the "LoadGameFromSlot" methods, call the interface, return the BP_SaveGame and set it to the BP_SaveGame variable there.
Thank you for the suggestion! I want to clarify that Casting has zero impact on memory when the actor being cast to is already loaded in memory, such is the case for all framework classes, they are always in memory already, so casting to them makes zero difference Many people believe that casting is bad for performance, but this misconception often stems from misunderstandings about how casting affects memory usage. Casting is only problematic if it creates hard references between classes that shouldn't always be loaded together, which leads to increased memory usage.
This is amazing! Really well explained and clear instructions with what to do and why you are doing it. A lot better than other tutorials out there. This is really underrated!
i came here to figure out how to save gathered coins to display at end of round but also accumulate and save in a coin bank variable to display in menu. thanks for the video!
Keep it up. You make the most useful videos on unreal and game dev. I really appreciate it as it demistify the game engine. I am building an action RPG as a hobby project to learn to build and iterate on ingame systems and have found a lot of use for your topics. Some suggestions might be level up systems (i.e. adding or improving ingame skills) and inventory management including attributes like weight management and or stashing items. Other genre ideas might be turn based xcom type games. I can't find anything recent for that type related to unreal. Anyway, great job...hope you keep it up. Let us know what else your up to i.e. future topics, games you're working on...God Bless and good luck.
Hey there! Thank you for the kind words and suggestions! I'm very happy to hear that you find my Unreal and game dev content helpful. Level up systems and inventory management sound like fantastic topics to cover in the future. Turn-based games like XCOM are also an interesting idea, but a bit out of my comfort zone! I appreciate your support and encouragement. Stay tuned for more content, and I wish you the very best with your game development journey too. God bless!
Instead of saving Actors by class, I found that saving Actors by Tag is much better. This lets me save any Actor that has a specific tag, regardless of the Actor class itself. Using this, I can make one FOR loop that saves cubes, NPCs, Niagara Effects, etc. ... basically any Blueprint Actor with the tag.
Thank you for sharing your approach! Using tags for saving actors is definitely a flexible method. It allows for more dynamic saving and makes it easier to manage different types of actors in your game. Great tip! 🙏
Went from learning unity through youtube tutorials and online courses to then trying to learn unreal through youtube and you are the first channel I've came across where I felt like I was actually learning properly and actually getting a grasp on the concepts of game development and not just copying what the person was saying, the way you present and do these videos inspires and motivates me, had problems of loosing motivation countless times I've deleted so many projects that i started and just completely lost the will to keep trying, but i honestly get so motivated and learned so much watching your tutorials, so thank you. Can i suggest doing a inventory system video? sort items, look at their stats, apply armour and switch out weapons etc, as its a common thing in games. Personally i would love a AI companion tutorial (Have a soft spot for good companion mechanics such as in assassins creed 3), have a few AI characters you can recruit either from paying them or doing a mission for them and have them follow you and you can give them items to wear or weapons to use and help in combat, tell them to wait, or to patrol the area etc, but a inventory system i think is something people would love especially being a fundamental mechanic in a lot of games
Hey Hades, thank you for your comment. I'm really glad you found this useful, and I appreciate that you see the value I provide. And thank you for the video suggestions. The inventory system is indeed an interesting one. I suggest tutorials by "Ryan laley" he has an entire series on making an inventory system
Thank you for going in depth with everything! It felt as easy to follow as the average tutorial but with the depth of actual docs, so it was easy to understand and retain the information
Thank you for all the time it took to make and edit this tutorial. You have a new subscriber. I truly appreciate your tutorials and how you explain things. I want to understand why I'm doing something, and not just do what you do because then after the tutorial you know nothing of the WHY.
Very good quality content from you. I like how you explain the right way of separation of code/data and functionality. I've seen many videos of people just slapping everything in their player/controller blueprints, which will probably work most of the time however it's very bad practice. I think it's due to the fact that many people who jump into UE don't or yet have a very knowledgeable understanding of software architecture.
Thank you for your feedback! I'm glad you appreciate the value in what I'm trying to do. It's definitely an important aspect that contributes to cleaner and more maintainable code.
Hey, thank you for the kind words and for watching! I'm really glad that you found the tutorial helpful. Let me know if you have any more questions in the future.
Jesus told me to tell you that He loves you and I wanted to add that you did a fantastic job with presenting this entire concept. Really great job man.
Anyway you can expand on this topic in a future video and talk about using this system with level instancing, main menu/ pause menu UI and possibly adding thumbnails to the save file ?
and also honestly it would be incredibly helpful, I can seem to only find tutorials on 1 subject or the other never linking them all together like you need to in a finished game. This would seem to be the "secret sauce" :)@@AliElZoheiry
I don’t know if your still ready comments in videos from 4 months ago but if you are I would love love love to see a good weapon system video. I been following someone and watching how they do it but they are in consistent Chang things to much and are just breaking the code. To the point where a game I’ve been working on is now just useless and I don’t know what to do. The video concept was having it where the player can hold more than one gun in inventory. One is in hand. And on is in inventory. And you have an option to put both away and just go with hands. Then he changed them all messed it up and then added an ammo system and it just got all confusing. I do want an ammo system but learning the weapon system and ammo system from someone who teaches like you do would be amazing.
Hey there! Thank you so much for your suggestion, I appreciate your support and feedback. I'll definitely consider creating a video on a weapon system and ammo system in the future. Keep an eye out for more content!
Thanks Ali, this tutorial is amazing! Thank you for properly explaining every step as opposed to just telling us where to put what blueprint :D I was hoping you could help me with a follow-up question; How would you go about saving and loading a huge amount of different spawned blueprint actors as opposed to only the BP_Cube in this case? So far example BP_Cube, BP_Cylinder, etc. etc. Thanks!
Hey SweetChili! Thank you so much for this, I really appreciate you 🙏🙏 Regarding your question: the principle is the same, you want to identify what you want to save about your actors, only the minimum amount of information needed to perfectly recreate their state, that could be as simple as the actors class and their location in the world, then you can make a struct out of the data you want to save about your actors, and then just save an array of that struct type. Then when the game loads, you loop over your array and respawn the actors based on the loaded data
Thank you for your kind words! I'm really glad you found the tutorial helpful. If you have any more questions or need further clarification, feel free to ask.
What people fail to realize is you have to call the function you use when loading your game, meaning if you have a attach weapon to socket you have to call that, the game won't automatically do that just because you save and load that your character has an axe in its hand, if you have an inventory system you have to add all of the saved items back in the inventory as if they where being picked up from the world.
FIRST of all thank you for the best tutorial i have ever seen, SECOND, i am trying to make this into a multiple save slot system but changing the same slot name isnt working. any advice on how i should go about it ?
Hey there! Thank you for your kind words, I truly appreciate it! Having unique names for the save slot should be enough. Not sure why it wouldn't work for you 🤷♂️
Absolutely awesome content man, really appreciate this stuff. Keep it coming. You made the thought process and the process itself so simple to understand. I used to get overwhelmed by the amount of code I was working with, trying putting everything into one event graph. It makes me want to go back and watch some earlier tutorials from others and see if I can implement this process into it. Really looking forward to content from you in the future. If you see this, do you have a patreon or any other place you post content?
Thank you so much for your kind words and support 🙏 I'm really happy to hear that you found my content useful! I indeed do have a Patreon, the link is www.patreon.com/Alizoh
I really liked the detailed information. Though, there is no information on how to load saved data from a specific slot (for us who uses Load Game widgets). With this, it just seems like we're using 1 slot and 1 slot only
Hey, glad you found this helpful! For multiple characters you need to have a unique identifier for each character, either an ID or name. Then you start the saveData in a map, where the key of the map is the unique identifier of the character, and the value is the saveData that is unique to that character
Hi Ali, another amazing and very in depth video, thanks for being such a great teacher! I was able to save correctly but i have a bit of trouble since we put the "use player data" in the begin play: in my set up i have several heroes that the player switches at runtime (i summon the "new one" and then destroy the "old one"). This used to work ok, but now it takes me to my last checkpoint. Any suggestions on where / how i should be calling the use player data? Thanks in advance, and for answering so fast always, even in old videos
Hey, thank you for your kind words! I'm glad you're finding the videos helpful. It's great to hear that you were able to save correctly. You can then call it in the PlayerController since that is loaded only once and has access to the pawn
hello great tutorial for showing how to separate and use BPI's effectively, I'm having trouble saving my "cubes" I've set up the code the same way minus the level blueprint as I am only spawning an actor with a key input yet they do not save transform.
Hey there! I'm not sure I understand the issue, but if you're data is being saved and loaded, but try printing the loaded data to see it's value, and if nothing is saved at all, then you must have missed something in one of the save/load functions, I suggest going over it again
Still not finished the video, but I wanted to post this question I got while hearing your description, a for the algorithm b for my memory , so I don't forget it. If you save something asynchronos. What happens if you change the data while you are saving ? ( Guess something like that can only happen if you save huge data ) For example weapon is a start save he hasn't saved weapon a yet switch weapon to b save is completed ?
2 things can happen: 1. The old data is saving, you change it, that triggers a new save function call and it overrides the old save data, so everything is fine. 2. OR, The old data is saving, you change it, that triggers a new save function call, and the old call finishes AFTER the new one, thus saving old data. That, in software, is called a "race condition" and is an unfortunate side effect of asynchronous functions. So you should prevent 2 saves from happening at the same time just to be safe
This is not what interfaces are intended to do. The interface will still cast and type check. An interface is not for decoupling either. Its for providing consistent functionality between -unlike- types. Instead you should store the gameinstance reference in a static variable or data asset where it can be retrieved easily from anywhere. Better yet, make a blueprint func library to wrap it.
Hey there, thanks for the suggestions. The interface here is to easily replace the Gameinstance with any other class, as you can have your own custom gameinstance as well or you may want to use another class for any reason, so it's always good to create interfaces in these cases to describe the desired functionality without being coupled to a specific class implementation. Also, interfaces don't cast to the base class under the hood, they only cast to the interface itself, thus loading only the required functions in memory and not the entire class
For some reason I can't get my brain to put it together, but how would I set this up to load the last level that the player was in? Say I have a save game, I click continue in the main menu, and then it would load the player back into the last level they played. Either way, great tutorial man!
Hey there! Definitely, to load the last level the player was in, you would need to save the level information when the game is saved, and then upon loading, you'd retrieve that saved level data and load the corresponding level. I'm glad you enjoyed the tutorial!
Hey Ali! Amazing tutorial as always! Quick Question; For things to save (Enemies, Items etc..) when you have different levels, would the best practice be to make an array of each level separately? Or is there a better way to do it? For reference; Think of the classic resident evil games, where each room was its own Level. In order to keep track of number of enemies killed, would they have an Array of enemies for every different level or via another method?
Hey there! I'm glad you enjoyed the tutorial! In regard to keeping track of enemies and items in different levels, it's definitely a good practice to organize them based on the levels. You can have your SaveGame data organized as a Map (Map here being a Data type also known as key value pair) where the key is the name of the level and the value is a LevelSave struct, and inside that struct you can have multiple structs as well. That's just one way of doing it of course, it will all highly depend on what you want to save.
great tutorial bro, but i lost you where you were making a new checkpoint cause I already have one in my game and now i don't know how to just connect it with your code.
You can either save the location of the player when they enter the checkpoint, or save the location of the checkpoint itself, at the end of the day, you just need a player location vector in your save game class
Hey! I'm glad you loved the video! You can call the "SavePlayer" function from anywhere and it will work just the same, whether on key press or from a widget, really anywhere you like
Hey there! Thank you so much for enjoying my AI series and for the suggestion. Adding cheat codes for developer testing is a really interesting idea, I'll definitely consider it for a future video. Stay tuned and thanks for watching!
This was very good! would love to see some basic variables saved like has a key? or has a item? and a major loss was not having running this from a start menu from like a New Game or even Continue Game, so I'm still stuck :(
Great video as always! One question thought Lets say you want to store a bunch of different things, such as Player Stats, Settings Preferences, Game state, Inventory, Game Progression, Level & XP etc... Would you rather have just one single SaveGame and Slot and store a unique struct for each category in that SaveGame - or would you have one SaveGame and Slot per category?
According to the official unreal documentation: The system is made to support saving different save game files to different slots to support separating globally-unlocked features from playthrough-specific game data. So you should definitely be using separate SaveGame files for data you want to save and load separately
@@AliElZoheiry Alright cool! Thanks for the reply, keep the vids coming - your videos and guides are among the better UE ones here on youtube for sure.
While the tutorial is great so far (not quite far in), one thing to keep in mind is that Struct variables are notoriously unreliable and do not always save correctly. I've run into many a problem trying to use them in previous projects.
Hey there! Thanks for the feedback. I personally haven't experienced any issues with structs so far. It is also the recommended way in the unreal docs to save/load data. So I really hope it doesn't backfire 😅
@@AliElZoheiry yeah I'm hoping so myself! The video was definitely a great way to go about making a save system, I appreciate it. It might even just be that the engine version was the problem (5.1, that terrible mess lol), but I had multiple people and other devs telling me structs can be unreliable. I appreciate the work you put into this one, thank you!
Thanks for the great video. I followed this video and created a Use Player Save, but when I enter the Check Point area, everything is reset when I launch the game again. When I first created the game, I only created a Transform in S_PlayerSave, but in this case, do I need to build the nodes in a new style in the Use Player Save Function?
Hey! Thanks for your comment. Saving the transform should be enough, not really sure why it's resetting for you. I suggest some more debugging to narrow down the problem area.
This tutorial has been most insightful. I am having a little bit of difficulty modifying it to be used with UI buttons to save the data and getting it to load back up. Is there some trick to getting that to work?
Hello. How can i spawn many child actors from tranform. For example there is a master furniture actor and i saved table,tv and sofa. How can i spawn theese?
Hey there. Just like I mentioned in the video, you need to check what information do you need to know to be able to respawn these items? is the furniture actor enough? do you need to know what variables were inside that actor? anything you need to know to respawn the actors, you can create a structure for it, and save that structure in your GameSave object
@@AliElZoheiry I just found how to do. I created save data for every single furniture like save cube. It is longer way but works perfect. Your tutorial is the most perfect and complete tutorial i have ever seen. I could easily modify it. Thanks
I am mostly commenting for the algorithm, but your content is of the highest quality for the unreal engine i have come across. Keep up the amazing high-quality content! I love how descriptive you are on the reasons to do each step and its less like a tutorial to get the system into the game and more a tutorial on how to use the tools of Unreal Engine in a logical fashion. Thank you!
Thank you for the kind words! I'm glad to hear that you appreciate the level of detail in my tutorials. I'll definitely keep the high-quality content coming for the Unreal Engine community. Your support means a lot!
Hey, we would love to see an inventory system tutorial series from you man. Watched your smart enemy Ai series and its amazing and the best Ai series so far on UA-cam. Keep up the good work!!!
Hey, thanks for watching and commenting, anything specific you're looking for? or just a basic inventory management system?
@@AliElZoheiry hey you forgot to cut the (chloe get the fk down ..3.2.1 action :)))))))))))))))))
@@MaxStudioCG2023 hahah yeah someone else mentioned it and I fixed that hahaha
@@AliElZoheiry haha good :))))
@@AliElZoheiry please make a tutorial on how to create quick item system. Because there is no such course on youtube or udemy. There are mostly tutorials on how to collect items, how to drop items in the inventory, etc. For example; it would be great to see a system where we can have separate slots where skills and quick-usable items in our inventory can be connected and we can switch between objects in these slots quickly without slowing down the pace of the game.
My game I developed has become much better thanks to you. I hope we can meet and work together one day. Sincerely regards
You the first guy I see making a save and load tutorial very clearly I watched the entire video without getting bored. I really want to see more tutorial from you man, Keep up the good work.
Hey! Thank you so much for your kind words and feedback! I'm glad you found the tutorial helpful and engaging. I'll definitely keep the tutorials coming, and I appreciate your support!
I really appreciate that you teach correct design patterns. A lot of channels just go with the naive solutions and don't even allude to a better way existing. I'm right now coming from having written a "quick and dirty" prototype, and going into rebuilding a proper production codebase. Your channel is so perfect for me right now, these are all the exact things I need to be thinking about.
I'm glad to hear that you find my channel helpful. Correct design patterns are crucial for building a robust and scalable codebase, and I'm glad I can provide content that aligns with your needs. Thank you for your feedback and all the best with your codebase redevelopment!
I have been working with Unreal for over 2 years and have seen hundreds of tutorial videos from nearly a hundred creators. This is by far the best tutorial presentation on an Unreal topic I've seen. I don't like comparing people, but if I had to, I'd say that "at last, we've found the Brackeys for Unreal." Well done, sir!
Thank you so much for your kind words and high praise! I really appreciate your feedback and I'm thrilled to hear that you found the tutorial so helpful. Thank you for watching and commenting.
Seen a couple of your tutorials, and just wanted to compliment you on teaching good coding.. Instead of "bad coding for the sake of this tutorial"..
Keep up the good work..
Too many creators cut corners with bad practices, which in turn really dosn't teach anything useful..
Thank you so much for your comment. I'm really happy that you see the value I'm providing. This is indeed the niche I was going for
Really appreciate these tutorials and how in depth you explain things. I like to understand why I'm doing something and not just copy and paste. Keep em coming!
Thank you for saying that 😊🙏 that is exactly what I was going for. Glad you see the value in it
OMG. I finally found someone on YT who is able to provide industry level information. This stuff is very usable and I couldn't be more grateful for this content!
Thank you Philipp, I appreciate your support and feedback. Glad you found this useful!
This is what I CRAVE bro.
The pacing is so good. You have chapters. You show what not to do and talk about why.
Thank you! I'm really glad to hear that you’re enjoying the pacing and structure. I appreciate your feedback 🙏
As a gamedev student in the fith term I can't thank you enough! This time we are completly free in choice of the genre and you are an absolute beast explaining things like this! I really hope you continue with the videos man, great work!
Thank you so much for the kind words! I'm really happy to hear that the content has been helpful to you. Best of luck with your game development studies, and I'll definitely keep the videos coming!
Now that was very helpful! Best save/load system explanation I've seen so far. Thank you very much for this tutorial, it really made my work a bit easier.
I'm so glad to hear that you found the tutorial helpful! Thank you for your kind words and support. 😊
Thank you so much. you are legend man. The most important thing in the game is main menu, Setting menu, saving and loading system.
You're very welcome! I'm glad you found this helpful🙏 I plan on making a part 2 of this where I make a main menu and custom load/save slots
@@AliElZoheiry That would be fantastic!
@@AliElZoheiry When bro when
Another thank you my friend. Spent the weekend revamping my save load system using this method. I had surprisingly few issues given the complexity of my setup. It is a vast improvement. I had function logic in BP_SaveGame and it confused my brain. This is easier to track and follow.
You're very welcome! I'm glad to hear that you found the method helpful. Simplifying the logic and tracking it more easily can definitely make a big difference!
Amazing and brilliant tutorial. one small bug I found is that if I exit and play again on the same checkpoint twice my health would go back to 100%, I am using your damage system btw
Edit: Same thing happened to you at 31:52 and 32:59 without you noticing.
you are the best UE youtuber out there and thank you for all your tutorials
Hey! Thank you for your feedback and for catching that bug. This indeed happens because as soon as you spawn on checkpoint, it triggers the SavePlayer function, which could occur before the health has been loaded.
To solve this, you should simply ignore the checkpoint on spawning (either through a timer, or checking the location)
Look, I’ve been working in unreal for a few years now and I’ve created some decent save and load system but this right here is gold. I never understood why people create save and load method in the player character or game mode 😂😂😂 thank you mate
Thank you for your comment! I'm glad you found the tutorial helpful 🙏 Happy game developing!
A perfect video with simple instructions! Thank you!!!!
You're very welcome! I'm glad you found it helpful. Thank you for watching and commenting 🙏
Amazingly detailed enough for me to implement it for something totally different I was saving, thank you!
Thank you! I'm glad to hear that you found the tutorial helpful for your project! If you ever need more assistance, feel free to reach out 🙏
I will be subscribing to your Patreon! You make things others don’t and that’s worth paying for!
Thank you so much for your support! I really appreciate it and I'm glad you find value in my content. Your support means a lot to me!
This was really useful, thanks a lot! A useful addition to this tutorial would be to save things like enemies, their position, health, alert state, if they're dead, etc- especially since you've got your series on enemy AI. The cube position was useful but it feels like this can get really complex really fast.
I'm really glad you found the tutorial useful! Thank you for the suggestion. Saving enemy state and position does indeed add complexity, but it's definitely something worth considering for a future tutorial.
@@AliElZoheiry Just wanted to give an update that I was able to use the information from this video to save / load more complex things like enemies and have them fit back in seamlessly. So the information applies very well! Thanks again for the video, it really was a big help for me and I imagine plenty of other people too.
@@perochialjoethanks for the update, really glad to hear it was helpful for you 🙏
Comments are good, so here I am because you are great.
I am not though, I missed the naming of the SlotName variable at 12:27, it took me 13+ hours of re-playing the vid and some help to figure that out. But I got there!
Thank you for your content! It's good to be learning the best ways to do things, instead of the messy ways.
Hey, thanks for your feedback! I'm glad you found the content helpful, and I appreciate your perseverance in troubleshooting the issue with the SlotName variable. Keep up the great work!
Dude I did as well, I always go to the comments to look for a potential fix or if somebody run into a similar issue haha, thanks a lot
thank you! you explained everything wonderfully, and this was so easy to follow and understand.
i have been putting off creating a save and load / continue game system for awhile
You're welcome! I'm glad you found the tutorial helpful. Don't hesitate to ask if you have any other questions! 😊
Good save game tutorial for beginners. If you dont like the spaghetti inside of a function just treat your input variables as if they were local variables.
The 2 most important parts of this are:
1 use the game instance, even if the game is multiplayer.
2 create base classes for anything you want to save, so that like the end of this video you put save functions in those base classes.
Thank you for your comment, I hope you enjoyed it!
Your channel is a gold mine
Thank you! I really appreciate your kind words 🙏 Glad you’re finding it valuable!
Thank you so much man, these tutorials are awesome!
You're welcome! Thank you for watching and commenting 🙏
Had to comment, this level of detailed explanation has been very helpful.
Currently, I'm attempting to have the game create a new save slot each time a new game has started and the information of those slots updated in the load game widget.
So far it's gone horribly, but I appreciate you showing where the best places to store and retrieve data should live.
Hey there, thank you for your kind comment! Creating new save slots for each game start and handling the information update in the load game widget can be a bit tricky at first. I'm glad the detailed explanations have been helpful, and I'm confident with a bit more practice it will start to come together smoothly. Good luck with your game development endeavors!
Hello !
First of all, I'm verry sorry for my broken English. I'm from Japan.
I discovered your channel recently and I think it's great to watch your videos that offer such quality content about UE! Well done and thank you so much for it!
I am contacting you because I have started the development of an Horror Escape Game on PC. I'm really not a professional in this area, at all, and I would love to see a tutorial about more complex features and, very importantly, a real save menu.
There are many good tutorials in English on the subject, but, I only see videos concerning relatively basic save system which do not take into great consideration the triggers (using do once or destroy actor), the collectible objects which would be picked up in several levels, the passage between several levels, etc.
What I would really like to see is a tutorial that deals with and clearly explains, in addition to what we basically see everywhere, more complex save system:
- Saves (in different slots) and loading games menu
- Check points (with a list of all saved check points in the save menu, with the possibility of reloading them)
- Attribute and customize the name off the saves
- Interactive elements (saving picked up objects, multiple doors when the state changes from open to closed, etc.)
- Spawned and destroyed enemies (so that the trigger or event no longer retriggers after saving / auto-saving)
- Inventory
- When and how properly use Game Instance and Game Mode (with the differences between sublevels and levels)
- The save logic between several levels (not just in a single level)
- The save logic in a game with only sublevels
- etc...
A video like this, with great teaching like yours, would be more than exceptional and unique !
Thanks again for all your videos!
Hey there! Your English is great, no need to apologize. Thank you so much for your kind words and suggestions. I've noted down your ideas for a more complex save system tutorial and will consider them for future videos. I truly appreciate your support and hope to create content that meets your expectations! Thank you for watching and reaching out to me 🙏
@@AliElZoheiry You're welcome. Thank you very much for your answer and your videos. Keep it up 💯
7:50 ive been searching for a week for someone to explain this shit the way youre doing. my brain cannot learn if someone else is doing all of the steps(work) for me. i REALLY hope you make more ultimate guides....
Hey, thank you so much for your comment! I'm really glad to hear that my teaching style resonates with you and that you find the explanations helpful. Rest assured, I'll definitely be creating more ultimate guides in the future. Keep an eye out for them!
You are really the best, honestly. Thank you for your videos and dedication to helping persons like myself be better at Game Development using Unreal. It's really appreciated.
What I would love to see is a mission/quest system. I know that would be awesome. So the quest system can have for example:
Collecting Items Quests (This would be collecting a certain amount of items, either you collect the items for yourself, or you collect the items and give them to another character)
Killing Enemies quests (This can be killing a certain number of enemies or killing all enemies that are either spawned or placed in a level. The number of enemies spawned can vary by being random. It would be really awesome to see how to store the data of spawned enemies so that it automatically plugs into the amount that should be killed on that specific mission. That way you could choose whether to have a set amount of enemies killed to pass the mission, kill all the enemies, or the mission could start by saying kill 5 enemies, but then others are spawned and the objective can be updated while the mission is still active to kill those that are spawned as well making the game more dynamic and enjoyable.)
Interacting with actors or character quests (This can be to go to someone and then a small dialogue can be played etc, pick up a specific item. That sort of thing. Like at the start of the game, there's an objective to pick up a sword and another objective of the same mission to equip the sword... that sort of thing)
Going to a certain location quest (Have the player journey to a specific location in a level)
Timed missions (This is where you have to complete any of the four main mission types listed above at a given time... normally you'd have to get to a checkpoint before the time runs out or collect certain items within a certain time)
Combined missions: where you could fuse different mission types into one. For example, you could have the player kill enemies within a certain location, if an enemy is killed outside that specific location, it doesn't contribute to passing the mission.
My apologies for the long comment, I just wanted to explain what I'd like to see.
Hey Kellow, thank you so much for your kind words and your suggestions. I take all suggestions into account, I put them in a list and prioritize them with each new video, so this is very helpful. Thanks again and I'm glad you're enjoying my videos so far 🙏
Great tutorial. Quick suggestion. Casting is not ideal due to memory impact (though you could argue it could be small in this case). What I did was add a function to the BPI called "GetSaveGameBP" then add the interface to the BP_SaveGame and for that method, reference "Self" then return it for that method. In the GameInstance BP, I call the Save Game that's outputed from the "LoadGameFromSlot" methods, call the interface, return the BP_SaveGame and set it to the BP_SaveGame variable there.
Thank you for the suggestion! I want to clarify that Casting has zero impact on memory when the actor being cast to is already loaded in memory, such is the case for all framework classes, they are always in memory already, so casting to them makes zero difference
Many people believe that casting is bad for performance, but this misconception often stems from misunderstandings about how casting affects memory usage.
Casting is only problematic if it creates hard references between classes that shouldn't always be loaded together, which leads to increased memory usage.
This is amazing! Really well explained and clear instructions with what to do and why you are doing it. A lot better than other tutorials out there. This is really underrated!
Thank you so much for your kind words! I'm really glad you found the tutorial helpful. Your feedback means a lot to me 🙏
Love your tutorials man. Your pacing is great!
Thank you! I'm really glad you're enjoying the tutorials and finding the pacing helpful!
i came here to figure out how to save gathered coins to display at end of round but also accumulate and save in a coin bank variable to display in menu. thanks for the video!
Hey! I'm glad you found the video helpful 🙏
Keep it up. You make the most useful videos on unreal and game dev. I really appreciate it as it demistify the game engine. I am building an action RPG as a hobby project to learn to build and iterate on ingame systems and have found a lot of use for your topics. Some suggestions might be level up systems (i.e. adding or improving ingame skills) and inventory management including attributes like weight management and or stashing items. Other genre ideas might be turn based xcom type games. I can't find anything recent for that type related to unreal. Anyway, great job...hope you keep it up. Let us know what else your up to i.e. future topics, games you're working on...God Bless and good luck.
Hey there! Thank you for the kind words and suggestions! I'm very happy to hear that you find my Unreal and game dev content helpful. Level up systems and inventory management sound like fantastic topics to cover in the future. Turn-based games like XCOM are also an interesting idea, but a bit out of my comfort zone! I appreciate your support and encouragement. Stay tuned for more content, and I wish you the very best with your game development journey too. God bless!
man i really wanted this, man you are really an angel😭. Thank you making this
now I will go and watch this video
I know it will be very helpful
You're very welcome! and thank you for your comment! I hope you find it useful 🙏
Wow. The best I’ve seen. Explains the concept and reasons which are sorely lacking elsewhere.
I really appreciate your comment. Glad you found it helpful and thanks for watching 😊🙏
Instead of saving Actors by class, I found that saving Actors by Tag is much better. This lets me save any Actor that has a specific tag, regardless of the Actor class itself. Using this, I can make one FOR loop that saves cubes, NPCs, Niagara Effects, etc. ... basically any Blueprint Actor with the tag.
Thank you for sharing your approach! Using tags for saving actors is definitely a flexible method. It allows for more dynamic saving and makes it easier to manage different types of actors in your game. Great tip! 🙏
This is wonderful, I felt like I was in a college class. You are a great teacher
Thank you so much for your kind words! I'm really glad to hear that you found the video helpful and engaging. Your support means a lot 🙏
Went from learning unity through youtube tutorials and online courses to then trying to learn unreal through youtube and you are the first channel I've came across where I felt like I was actually learning properly and actually getting a grasp on the concepts of game development and not just copying what the person was saying, the way you present and do these videos inspires and motivates me, had problems of loosing motivation countless times I've deleted so many projects that i started and just completely lost the will to keep trying, but i honestly get so motivated and learned so much watching your tutorials, so thank you. Can i suggest doing a inventory system video? sort items, look at their stats, apply armour and switch out weapons etc, as its a common thing in games. Personally i would love a AI companion tutorial (Have a soft spot for good companion mechanics such as in assassins creed 3), have a few AI characters you can recruit either from paying them or doing a mission for them and have them follow you and you can give them items to wear or weapons to use and help in combat, tell them to wait, or to patrol the area etc, but a inventory system i think is something people would love especially being a fundamental mechanic in a lot of games
Hey Hades, thank you for your comment. I'm really glad you found this useful, and I appreciate that you see the value I provide.
And thank you for the video suggestions. The inventory system is indeed an interesting one. I suggest tutorials by "Ryan laley" he has an entire series on making an inventory system
Thank you for going in depth with everything! It felt as easy to follow as the average tutorial but with the depth of actual docs, so it was easy to understand and retain the information
Hey Jorrdan, that's great to hear! I'm always happy to receive such comments, because then I know it was received as intended. Thank you for that 🙏
I gain valuable unreal knowledge from every video you post. Keep them coming! Thank you for sharing.
Glad to hear that! Thank you for your comment. I'll definitely keep them coming ;)
Thank you for all the time it took to make and edit this tutorial. You have a new subscriber. I truly appreciate your tutorials and how you explain things. I want to understand why I'm doing something, and not just do what you do because then after the tutorial you know nothing of the WHY.
You're very welcome! and thank you so much for the kind words and support! Glad you found this helpful
Awesome tutorial! Thank you so much! :)
You're very welcome! I'm glad you found it helpful 😊 Thank you for watching and commenting!
I absolutely love your videos! Words cannot express how grateful I am for the incredibly helpful content you provide.
Thank you so much for your kind words! I'm truly happy to hear that you find the content helpful. Your support means a lot to me!
Very good quality content from you. I like how you explain the right way of separation of code/data and functionality. I've seen many videos of people just slapping everything in their player/controller blueprints, which will probably work most of the time however it's very bad practice. I think it's due to the fact that many people who jump into UE don't or yet have a very knowledgeable understanding of software architecture.
Thank you for your feedback! I'm glad you appreciate the value in what I'm trying to do. It's definitely an important aspect that contributes to cleaner and more maintainable code.
commenting for algorithm too, this channel is worth gold
Thank you for your kind words! I'm glad you find the content valuable 🙏
Bro you are amazing tutor! Thank you
Thank you! I really appreciate your kind words 🙏
This is absolutely GOLD my man, thank you very much for the clear explanation.
You're most welcome! I'm thrilled that you found the explanation helpful. Thank you for watching and commenting 🙏
Great presentation :) Really easy to follow
Thank you for the comment! I'm glad you found it easy to follow. Happy to hear that it was helpful! 🙏
That is the way. Thanks for being a great teacher!
Hey, thank you for the kind words and for watching! I'm really glad that you found the tutorial helpful. Let me know if you have any more questions in the future.
Jesus told me to tell you that He loves you and I wanted to add that you did a fantastic job with presenting this entire concept. Really great job man.
Thank you! and tell Jesus that I love him too 😁. Glad you found this useful! Thank you for watching and commenting
Anyway you can expand on this topic in a future video and talk about using this system with level instancing, main menu/ pause menu UI and possibly adding thumbnails to the save file ?
Hey Ryan, definitely something on my list. I could potentially make a full series out of this, stay tuned ;)
I'll b here :)@@AliElZoheiry
and also honestly it would be incredibly helpful, I can seem to only find tutorials on 1 subject or the other never linking them all together like you need to in a finished game. This would seem to be the "secret sauce" :)@@AliElZoheiry
I don’t know if your still ready comments in videos from 4 months ago but if you are I would love love love to see a good weapon system video.
I been following someone and watching how they do it but they are in consistent Chang things to much and are just breaking the code. To the point where a game I’ve been working on is now just useless and I don’t know what to do.
The video concept was having it where the player can hold more than one gun in inventory. One is in hand. And on is in inventory. And you have an option to put both away and just go with hands.
Then he changed them all messed it up and then added an ammo system and it just got all confusing.
I do want an ammo system but learning the weapon system and ammo system from someone who teaches like you do would be amazing.
Hey there! Thank you so much for your suggestion, I appreciate your support and feedback. I'll definitely consider creating a video on a weapon system and ammo system in the future. Keep an eye out for more content!
@@AliElZoheiry thank you. It would be so much help. Would pretty much finish my game at this point.
Thanks Ali, this tutorial is amazing! Thank you for properly explaining every step as opposed to just telling us where to put what blueprint :D
I was hoping you could help me with a follow-up question;
How would you go about saving and loading a huge amount of different spawned blueprint actors as opposed to only the BP_Cube in this case? So far example BP_Cube, BP_Cylinder, etc. etc.
Thanks!
Hey SweetChili! Thank you so much for this, I really appreciate you 🙏🙏
Regarding your question: the principle is the same, you want to identify what you want to save about your actors, only the minimum amount of information needed to perfectly recreate their state, that could be as simple as the actors class and their location in the world, then you can make a struct out of the data you want to save about your actors, and then just save an array of that struct type. Then when the game loads, you loop over your array and respawn the actors based on the loaded data
Great video man, thanks for posting
You're very welcome! I'm glad you found it helpful. Thank you for watching and commenting 🙏
Keep going man, no words can describe your work!
Thank you so much for your comments! I really appreciate your encouragement and support
love your workflow man , its tidy appreciated my friend
Hey, thanks for the kind words! Glad you appreciate my workflow 🙏
Thank you for this tutorial. Can you make one about how to make in-game screenshots and show them in save/load interface?
You're very welcome! Thank you for the suggestion, I'll definitely consider it for a future video 🙏
Thanks for the tutorials! Probably the best on UA-cam.
You're very welcome 🙏 glad they have been helpful
This tutorial was incredibly informative.
Thank you for your kind words! I'm really glad you found the tutorial helpful. If you have any more questions or need further clarification, feel free to ask.
Many thanks to you for your lessons.
You explain the code very well.
You're very welcome! Thank you for watching and commenting, happy to hear it was helpful
Perfect timing on this! Just was looking into this!
That’s awesome! I hope you enjoyed it!
What people fail to realize is you have to call the function you use when loading your game, meaning if you have a attach weapon to socket you have to call that, the game won't automatically do that just because you save and load that your character has an axe in its hand, if you have an inventory system you have to add all of the saved items back in the inventory as if they where being picked up from the world.
Indeed, I realized that as well from some of the questions. I hope to clarify these things in future beginner level tutorials
really informative thanks alot bro, need more tutorial videos like this
Thank you for the kind words! I'm so glad you found it helpful. More tutorials are definitely on the way. Stay tuned!
Thank you bro! Awesome like always
Any time! Glad you enjoyed it!
Love this. Thank you.
You're very welcome! I'm glad you enjoyed it 🙏
thank you so much for this totural i waanted this saving an loading was the ony thing that i did not had any idea in gamedev but now i will
You're welcome! that's great to hear that it was helpful 😇
Thank you, helped a lot.
You're very welcome! Glad to hear it was helpful 🙏
FIRST of all thank you for the best tutorial i have ever seen, SECOND, i am trying to make this into a multiple save slot system but changing the same slot name isnt working. any advice on how i should go about it ?
Hey there! Thank you for your kind words, I truly appreciate it! Having unique names for the save slot should be enough. Not sure why it wouldn't work for you 🤷♂️
Absolutely awesome content man, really appreciate this stuff. Keep it coming. You made the thought process and the process itself so simple to understand. I used to get overwhelmed by the amount of code I was working with, trying putting everything into one event graph. It makes me want to go back and watch some earlier tutorials from others and see if I can implement this process into it. Really looking forward to content from you in the future. If you see this, do you have a patreon or any other place you post content?
Thank you so much for your kind words and support 🙏 I'm really happy to hear that you found my content useful!
I indeed do have a Patreon, the link is www.patreon.com/Alizoh
Very helpfull for us! Thank you so much for you’re time!
You're very welcome! I'm glad you found it helpful. Thank you for watching and commenting 🙏
good quality videos man, thank you
Glad you're enjoying the videos! Thank you for your support 🙏
I really liked the detailed information. Though, there is no information on how to load saved data from a specific slot (for us who uses Load Game widgets). With this, it just seems like we're using 1 slot and 1 slot only
Thank you for your feedback! Loading and saving from the slot just means changing the string "Slot" string to be anything other that "1"
Very good tutorial, very in depth and well explained, but how would i make this for multiple characters?
Hey, glad you found this helpful! For multiple characters you need to have a unique identifier for each character, either an ID or name. Then you start the saveData in a map, where the key of the map is the unique identifier of the character, and the value is the saveData that is unique to that character
Hi Ali, another amazing and very in depth video, thanks for being such a great teacher!
I was able to save correctly but i have a bit of trouble since we put the "use player data" in the begin play: in my set up i have several heroes that the player switches at runtime (i summon the "new one" and then destroy the "old one"). This used to work ok, but now it takes me to my last checkpoint. Any suggestions on where / how i should be calling the use player data?
Thanks in advance, and for answering so fast always, even in old videos
Hey, thank you for your kind words! I'm glad you're finding the videos helpful. It's great to hear that you were able to save correctly. You can then call it in the PlayerController since that is loaded only once and has access to the pawn
hello great tutorial for showing how to separate and use BPI's effectively, I'm having trouble saving my "cubes" I've set up the code the same way minus the level blueprint as I am only spawning an actor with a key input yet they do not save transform.
Hey there! I'm not sure I understand the issue, but if you're data is being saved and loaded, but try printing the loaded data to see it's value, and if nothing is saved at all, then you must have missed something in one of the save/load functions, I suggest going over it again
00:45:08 - Pause, GET THE FUCK DOWN. Haha! Thanks for another great lesson Ali!
Hahahaha omg... I should have cut that out... 😅😅
Thank you. your tutorial is the best. you save me
You're very welcome! I'm glad to hear that this tutorial was helpful for you. Nice pun btw ;)
Still not finished the video, but I wanted to post this question I got while hearing your description,
a for the algorithm
b for my memory , so I don't forget it.
If you save something asynchronos.
What happens if you change the data while you are saving ? ( Guess something like that can only happen if you save huge data )
For example weapon is a
start save
he hasn't saved weapon a yet
switch weapon to b
save is completed ?
2 things can happen:
1. The old data is saving, you change it, that triggers a new save function call and it overrides the old save data, so everything is fine.
2. OR, The old data is saving, you change it, that triggers a new save function call, and the old call finishes AFTER the new one, thus saving old data.
That, in software, is called a "race condition" and is an unfortunate side effect of asynchronous functions. So you should prevent 2 saves from happening at the same time just to be safe
This is very cool!! thank you
Glad you liked it! You're welcome! 😊
This is not what interfaces are intended to do. The interface will still cast and type check. An interface is not for decoupling either. Its for providing consistent functionality between -unlike- types. Instead you should store the gameinstance reference in a static variable or data asset where it can be retrieved easily from anywhere. Better yet, make a blueprint func library to wrap it.
Hey there, thanks for the suggestions. The interface here is to easily replace the Gameinstance with any other class, as you can have your own custom gameinstance as well or you may want to use another class for any reason, so it's always good to create interfaces in these cases to describe the desired functionality without being coupled to a specific class implementation.
Also, interfaces don't cast to the base class under the hood, they only cast to the interface itself, thus loading only the required functions in memory and not the entire class
I was seaching for it from long ago for my game
Nice! Hope it's useful 🙏
Great video, Liked!
Thank you! I'm glad you enjoyed it. Your support is appreciated.
Professor, agradeço pelos vídeos. Você está me auxiliando muito no projeto, no qual estou participando.
Fico feliz em poder ajudar! Obrigado por assistir e participar do projeto 🙏
For some reason I can't get my brain to put it together, but how would I set this up to load the last level that the player was in? Say I have a save game, I click continue in the main menu, and then it would load the player back into the last level they played.
Either way, great tutorial man!
Hey there! Definitely, to load the last level the player was in, you would need to save the level information when the game is saved, and then upon loading, you'd retrieve that saved level data and load the corresponding level. I'm glad you enjoyed the tutorial!
You are the king💜🙌🏽
Thank you for your kind words! I'm glad you're finding the content helpful 🙏
Fantastic stuff!
Thanks! Glad you found it useful
Hey Ali!
Amazing tutorial as always!
Quick Question; For things to save (Enemies, Items etc..) when you have different levels, would the best practice be to make an array of each level separately? Or is there a better way to do it?
For reference; Think of the classic resident evil games, where each room was its own Level. In order to keep track of number of enemies killed, would they have an Array of enemies for every different level or via another method?
Hey there!
I'm glad you enjoyed the tutorial! In regard to keeping track of enemies and items in different levels, it's definitely a good practice to organize them based on the levels. You can have your SaveGame data organized as a Map (Map here being a Data type also known as key value pair) where the key is the name of the level and the value is a LevelSave struct, and inside that struct you can have multiple structs as well. That's just one way of doing it of course, it will all highly depend on what you want to save.
you should expand it 1 more episode with the menu saving (when player chose save,load from widget buttons, and to slots)
Hey, thank you for the suggestion, I’ll definitely consider it
@@AliElZoheiry thanks , by the way great tutorials !
Hey can u do a video explaining gamemode and gamestate and stuff for multiplayer??
Hey! Thanks for the suggestion. I'll definitely consider doing a video on GameMode and GameState for multiplayer. Stay tuned! 🙏
great tutorial bro, but i lost you where you were making a new checkpoint cause I already have one in my game and now i don't know how to just connect it with your code.
You can either save the location of the player when they enter the checkpoint, or save the location of the checkpoint itself, at the end of the day, you just need a player location vector in your save game class
Hi Loved the detailed video.....How do I assign the save system into a keyboard key ?? Would the widget also work it??
Hey! I'm glad you loved the video! You can call the "SavePlayer" function from anywhere and it will work just the same, whether on key press or from a widget, really anywhere you like
Hi Ali, I love your AI series its Great! Can you make a video about "How to add cheat code in Game for Developer Testing :)
Hey there! Thank you so much for enjoying my AI series and for the suggestion. Adding cheat codes for developer testing is a really interesting idea, I'll definitely consider it for a future video. Stay tuned and thanks for watching!
@@AliElZoheiry Thank you Ali 😄
Sir can you make a tutorial about Blackboard ai tree I fell difficult while working with it
I have an entire 22 part series on AI and beheavior trees on my channel. Check it out
This was very good! would love to see some basic variables saved like has a key? or has a item? and a major loss was not having running this from a start menu from like a New Game or even Continue Game, so I'm still stuck :(
Hey there, thank you for the feedback! it's a great suggestion and I'll look into including that in a future video. Keep an eye out for it! 🙏
@@AliElZoheiry I came back to this in hopes of an update as this has become relevant again, unfortunately there is no video about it still :(
Great video as always! One question thought
Lets say you want to store a bunch of different things, such as Player Stats, Settings Preferences, Game state, Inventory, Game Progression, Level & XP etc... Would you rather have just one single SaveGame and Slot and store a unique struct for each category in that SaveGame - or would you have one SaveGame and Slot per category?
According to the official unreal documentation: The system is made to support saving different save game files to different slots to support separating globally-unlocked features from playthrough-specific game data.
So you should definitely be using separate SaveGame files for data you want to save and load separately
@@AliElZoheiry Alright cool! Thanks for the reply, keep the vids coming - your videos and guides are among the better UE ones here on youtube for sure.
Very good! How would you set it up in multiplayer?
That would be its own tutorial ;)
While the tutorial is great so far (not quite far in), one thing to keep in mind is that Struct variables are notoriously unreliable and do not always save correctly.
I've run into many a problem trying to use them in previous projects.
Hey there! Thanks for the feedback. I personally haven't experienced any issues with structs so far. It is also the recommended way in the unreal docs to save/load data. So I really hope it doesn't backfire 😅
@@AliElZoheiry yeah I'm hoping so myself! The video was definitely a great way to go about making a save system, I appreciate it.
It might even just be that the engine version was the problem (5.1, that terrible mess lol), but I had multiple people and other devs telling me structs can be unreliable.
I appreciate the work you put into this one, thank you!
Thanks for the great video. I followed this video and created a Use Player Save, but when I enter the Check Point area, everything is reset when I launch the game again. When I first created the game, I only created a Transform in S_PlayerSave, but in this case, do I need to build the nodes in a new style in the Use Player Save Function?
Hey! Thanks for your comment. Saving the transform should be enough, not really sure why it's resetting for you. I suggest some more debugging to narrow down the problem area.
This tutorial has been most insightful. I am having a little bit of difficulty modifying it to be used with UI buttons to save the data and getting it to load back up. Is there some trick to getting that to work?
Never mind I managed to figure it out.
Hey there! I'm glad you found the tutorial helpful. Happy to hear you figured out the solution. Well done 💪
Hello. How can i spawn many child actors from tranform. For example there is a master furniture actor and i saved table,tv and sofa. How can i spawn theese?
Hey there. Just like I mentioned in the video, you need to check what information do you need to know to be able to respawn these items? is the furniture actor enough? do you need to know what variables were inside that actor? anything you need to know to respawn the actors, you can create a structure for it, and save that structure in your GameSave object
@@AliElZoheiry I just found how to do. I created save data for every single furniture like save cube. It is longer way but works perfect. Your tutorial is the most perfect and complete tutorial i have ever seen. I could easily modify it. Thanks