I've watched this tutorial about 10 times since you posted it. Not only is this a great way to create a save system it also shows the best way to implement any manager class! So much good stuff in here thank you so much !
I see a lot that people have difficulty turning the basic tutorials on save system into actual working systems. So I thought this would be very useful for many game devs.
This is great and very timely, thank you. Too many tutorials only show how to save an individual variable or something which isn't wrong but not practical or scalable. I have a project in proof of concept phase still and realised the save system has to be baked in very early and to be honest started to seem quite daunting. This video is brilliant and it was great to know I was on the right track already but this way is simpler and more scalable than what I currently have. Thanks so much for this.
I love this tutorial. Every other "save system" on youtube is like INCREDIBLY basic to the point that literally no game would use it at scale lol It also over relies on making a monolithic player blueprint. This is just the right amount of advanced that its useful for intermediates and modular that its something people would actually use. Its very hard finding stuff that isnt "so you just started learning game development!" or "here is how you from scratch re create unreals real time ray tracing system!" lol
@@LeafBranchGames This one definitely hit all of them! I especially always like seeing using interfaces and events. They are so powerful but almost never used in videos. I didnt even know the use cases for these for a good portion when I was a beginner xd
@@IGiveTheBestTakes Yes. As a beginner it is impossible to distinguish between good or bad practice and the cost of doing someing easy now that will make it harder later and the other way around.
I've been using this save system, as its probably one of the best ones out there. A tip for if your making a single player game, make sure you are calling load game on the gamemode, that way the game isn't passing along a null/empty save game to the actors on begin play.
This sounds like very important advise, but I'm not sure I follow! Can you elaborate a bit more? :) In the video he calls it on gameinstance, right? I've been trying to study the framework, what inherits from what and what spawns what. I think i understand part of it but its quite overwhelming still. I would love to learn more!
@ so within the game mode, get your game instance and call the load game function that you have. This will load the save data. If your confused as to what a game mode is, there’s documentation and other Reddit forms that’ll explain it better, but basically, it’s the class that will load in things like your player controller, default pawn, etc. It’s meant to keep track of high level game logic, like win conditions, scores, etc. I also personally use it to spawn in classes/actors, I know I will always need for the entire game session
Great tutorial as always! I would add my voice to a request for a part 2 with movable/destructible items and a manager for these. Say a sword which can be picked up in level 1 and dropped in level 3 or even characters which can killed or not and stay dead if you return to the level.
This please! I'm trying to wrap my head around how to go about creating an observer/manager that will keep track of items that have been picked up but in a scalable way. I'm confused as to how to allow the designer to place objects in the scene and then have them not be loaded again later upon being picked up without a huge monolithic tmap or array of every item on the Save Game Object. And then to have the items level specific as well.
I saw this video, watched it once, and saved it to watch when I got to that part and thank goodness I did. The previous tutorial I watched tried to implement a save game in the middle of an unrelated tutorial and I just skipped it, knowing I'd come back to this one and it'd work no matter what.
Coming back to this months later, when looking for a solution to update my event driven UI. I basically used these same principles and changed the game instance to the HUD and save game file to just be a struct in the HUD. This struct acts as the save file data. When a widget requests ui data everything works the same way as the save system :) Its amazing really. My only concern was calling get all widgets with interface to much so I made a pool and just call that :) Again this video helped me understand how to build modular decoupled data systems and I thank you so much for it :)
I'm just gonna echo what everyone else has said. This aspect of game programming in general (managing the game state) has always been really intimidating for me but you just made it click so well with the "hey fill out this form" analogy
From the video it is easy to understand how the system works. Great job. But to be able to invent systems like this... I would feel like a genius. I wish I could be at your level, or at least half of it :D
the mic, and the no music background even if the music was cool are such an insane improvment cause i watched 3 time ur rpg serie and this is awesome u improved on that
Wonderful. I'm not sure why I didn't watch this sooner. This is why I love it when you do system-building tutorials. This is perfect. I have one question though, how would you get this to work with other actors that depend on the Player character? For example, the player picks up three weapon actors, which are stored and attached to the character. What is the best step in getting those actors removed from the map and equipped to the proper slot upon loading the game after the weapon actors are picked up?
What is best depends wholly on a lot of details how you intend your project to work. You want to get the data to load into your objects when it is relevant. This can be when a pawn is possessed, whan an actor is spawned, when a certain object reaches a certain state. You have to determine when is a good time to load (or save) data for your project based on what you are trying to achieve.
No começo do vídeo fiquei pensando será que não só mais um tutorial de como salvar o jogo, e vou te falar eu tentei algumas formas de fazer o salvamento do jogo seguindo alguns tutoriais no youtube, e realmente foi como você disse, somente esse seu vídeo funcionou no meu projeto, e não somente isso, me fez entender como funciona a lógica por trás de tla forma que sai configurando tudo que preciso salvar sem dificuldade alguma. Muito Obrigado.
your tutorials are so valuable, thanks very much. I expect to make a video about Steam Online Subsytem on future, if you want to make that. Thanks again, you are the best!
Honestly one of the best tutorials on how to create a saved game, really scalable and adaptable to any project, but I have a question, casting the game instance and constantly hard referencing the Save Game object creates a lot of circular dependencies. Is there a way to keep this structure comfortable and at the same time solve the dependency problem?
Thank you! There really isn't an issue here. The game instance is the single only class that you will always without exception have when you run your game. Regardless of what you do, this is true. So casting to it doesn't really matter other than for separation of code. The save game itself should likely not have a very large footprint, and that it is so closely tied to the game instance should not be an issue.
What you are doing at 42:00 I suggest you just move that loop to the same location that the actor list is processed. This will avoid needing to implement "system behaviour component responsibility" on individual actors. I can recommend replacing individual values of serialized data with a struct. That way, if you need to save Copper as well, you only need to add another variable to the struct. At least for larger objects with a lot of data. One major topic that was not covered, I would like to see how this system deal with multiple instance data? In that you have 4 enemies of the same type (blueprint). How can you save "one is damaged, one is dead, two are still default"? My approach would probably be to look at having each actor implement a unique key based on ActorId. (Actor->GetObjectName) To then look up a variable Map(String, Struct) from the SaveGame object which it can use to find a specific key aka. (Enemy_1, Enemy_2, etc...) On another note, if you are looking for a node formatter to help speed up placement of nodes, I really recommend "Blueprint Assist". It has saved me of countless perfectionist hours almost on a daily basis.
Yes, you could leverage the part of component save/load to not be the responsibility of the actor. That is not a bad idea. Concerning variable data storage - yes, naturally you will be storing information in structs/arrays/etc as the information becomes more complex. The examples were simply examples to keep things simple to understand. Multiple instance data would depend. It could be handled by a manager class or by unique actors. It all depends on how the game, levels, actors are meant to behave and spawn. I would opt for a GUID over an actor id in most cases. Thanks for the tip on the blueprint assist. I have considered getting something to keep things cleaner, but I am leaning towards electronic nodes.
@@LeafBranchGames I can understand your argument about GUID, as two actors with the same ActorId from different levels would possibly intersect? To my understanding, unreal does not have a proper GUID by defualt though. And you would need some plugin for it? I recall there being some hassle there when I looked into it. My workaround was to include level name in the key. Which would make it highly unlikely that they ever have a conflict. If you have some useful info on GUID I would love to hear that.
@@LeafBranchGames What I meant by GUID is a key that stays the same from the moment the actor is placed in a level. This does not seem to be the case for a guid, as it makes a new one on the fly each time it is called. Also found this comment about it on reddit claiming that it is Editor Only, and not available in shipping builds. This property is a must have for a save system to recognize it as the same actor.
@@LeafBranchGames Played with that system for a while and ran into a few dead ends. Trying to resolve them myself but it would be nice to see a follow-up on this topic from you since the first iteration is very well-structured and works like a charm. The issues I'm referring to in particular are when multiple actors in a level need to save and load their respective data, how would you tell which actor gets what data? Furthermore, suppose we are talking about collectible items. How does one manage data saving if some of them were manually placed in a level but others could be spawned by dropping from the inventory and any of those could be picked up later as well? Clearly, we need to store a map with references to actors as keys, but the realization is quite complicated.
@@dzmitryyafimau7647I would suggest you create a manager to handle saving and loading those objects. If they are placed objects in the world, I would suggest using GUIDs to keep track of the unique objects.
Fantastic tutorial, watched it more times than I can count. I would love to see a follow up on this where you expand on the system. I'm having the noob issue of not knowing where to implement the loading of a saved current level into the system you've made. The first issue I'm facing is that I can't request the load of at the same time as my character is spawning. Feels like there should be a smart way to integrate an async level loading system inside the gameinstance, but I'm not sure and just crashing my engine while attempting. I'm also assuming that for expanding on the overall savegame data structure, the clenaest thing to do is to have a few different structs with data inside them (like player character data in one, and then maybe quest progress in another one and something else in another one, or what do you recommend?
very good. this is a nice setup. I think I understand my issue with my save system. I used the Get Player Pawn, get component of class method to then save all the variables and load. This works fine when actively playing the game and loading with debug tools, but I suspect when loading from the menu it forgets what the player pawn is, since you are no longer in possession of a pawn...so defaults to the gamemode class when loading. If i'm correct then adding some of your interface sections will fix this. I'll try sometime this weekend.
It is just a matter of replacing the name for the save slot value. So it would very much depend on what type of save slot system you were creating. Since there are very many different approaches to how you could make use of slots. Most of the save system doesn't care what slot is used, only the actual events that interact with the file on disc.
if you ever do a follow up I would love to see how you would go about doing it You are such a valued part of this community thank you for all you do and I plan to show some support towards your work thank you for everything over the years.@@LeafBranchGames
Hello, this is a great tutorial, very well made and very helpful. However, I would like to expand it to be able to save a dynamic list of actors each with different properties. In my game I have an Item system where the player can create/delete/craft/... items. This means that the amount of Items and their different properties (each Item has its own properties, like a gun may have damage and ammo whereas a sword could have damage and reach) can be drastically different depending on game sessions and saves. This might also allow for a way to save multiple players in the case of a multiplayer game. Do you have any suggestions as to how to implement this in Unreal Engine 5? Apart from that this tutorial is great. Thank you very much!
In honor of 999 silver, I was the 999th like on this yt video. I never comment, and rarely like videos. But this was top to bottom the best tutorial on a save game system in unreal engine
@@LeafBranchGames do you know how I could add functionality to save which level the player was at? and what player start in the level we should choose to spawn at? or perhaps you could add an additional tutorial on something like this or point me in the right direction?
It's clearly a great system. I've rechecked mine twice over a few hours, but mine doesn't work. No errors. Just doesn't save. I'm debugging now. Hopefully if I find anything, ill let people know in case it happens to someone else. Edit: OK if anyone else has the same issue I have, I was using a widget not an actor. So to get all actors with interface obviously won't work. That needs to be swapped for get all widgets with interface and it works fantastically.
Thank you, I love your content! To make this fully scalable, would be great to be able to add objects that the SaveGame doesn't even know, but the ones that implement the interface do. So SaveGame will have data in the form of objects with an identifier, and then, when loading, the objects will search for that data and fill themselves. This way we don't need to add each variable to the SaveGame and it doesn't end up being a big list of variables. The way you did is easier to implement, and usable for small - medium projects, I'm just sharing possible ways to make it more scalable :)
I would claim this works for larger projects as well. It can handle objects it doesn't know of. Gold and silver are just simple examples. But if you want to handle more advanced types you just add structures and arrays.
Hey sorry to butt into your comment, @sebastianavena9919. Can you elaborate more on: "be able to add objects that the SaveGame doesn't even know, but the ones that implement the interface do." and "SaveGame will have data in the form of objects with an identifier, and then, when loading, the objects will search for that data and fill themselves. This way we don't need to add each variable to the SaveGame and it doesn't end up being a big list of variables."? From my understanding with this tutorial, say I have inherited SaveGame object that will be used for saving that will have a TMap consisting of some sort of FString or an FGameplayTag as key (identifier) that maps to an object as the value of the TMap itself. So when you actually need to put value into the inherited SaveGame object, you just have to add it to the TMap with the key value pair ,then when you'd like to 'load' the data from the SaveGame object, you'd simply pass the key to some sort of Load function and if there exist an object with the key, you assign the value retrieved from the SaveGame object. Am I correct? I feel like I might have got the logic wrong as I feel like I still have to 'assign' the retrieved value after I load the SaveGame object to the Saveable object that needs to know the already saved value. Thank you!
Thanks! I too appreciate your tutorial and wanted to say it is both dense and simple and yet powerful. I do have a question though. I'm tracking time and a day count in my game instance but since it's not an object, what would be the best way to do this with your system? Should I move it to another Blueprint?
Thank you for both the kind words and support! :) You could have it in game instance if you want to, but you can't use the same logic as it uses now. You would have to hook on to save the time on save and load the time when load is called. Or you could like you say have some class that manages this, it kind of depends on your game. Either way is perfectly fine, use the one you find the most convenient and usuable.
I had an issue for the loading request i think but about to do this again in a new 5.1 project to hopefully have it set up right for expansion into a project
im pausing for the night on the second time thru this at 36:42 and the continue button doesn't wanna do anything after i try to save a game and not sure where its wrong at
@@pHaace You can add the "does save game exist" to check that the save game you are trying to load first. If it doesn't, then you have not created it. If it does exist, but it doesn't seem to do anything, then you either are not loading things or the values you are trying to load are not correct in the save game structure. Then you need to debug.
Love the tutorial. Very straight and to the point. In my project my character is able to spawn a ton of different objects, each one with their own properties to save, including its location. I assume that I can just add the Interface to each spawned instance and so they will all become savable when called, and each will fill out their data as requested. Question 1: how to save the objects location Question 2: does adding the interface to the spawned object mean each spawned object will be spawned back in place?
I love your tutorials, have learned a lot. Still an absolute noob so please forgive me if this has been asked, how would I go about integrating this into your RPG system framework? I got totally lost when it got to the attributes portion and haveve no clue how to integrate the two systems.
Since all games operate differently and have different needs when it comes to how data is to be handled, there is no one answer to this. As a general instruction, you want to have a translation step to allow your data to be loaded/saved in a consistent manner as well as happening at times that are relevant for the gameplay to keep track and make use of the save information.
@@LeafBranchGames I think i figured out a way to do it, you mentioned using structures so I am going to give that a shot. But I don't know if you've encountered this error though: Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: LoadDataForRequester Graph: EventGraph Function: Execute Ubergraph BP Game Instance Blueprint: BP_GameInstance
Anyone having an issue with the accessed none on save game ref - if this isn't the first tutorial you've tried try deleting your built up save files in saved/ save game in your project files.
Thanks! If i may, it's scalable, but only to a certain extent, say for your character's data. But often you have like hundreds of saveable objects on a level, such as doors you've opened, objects you've moved, triggers you've triggered. Each one of them must save their position/state/whatever else. Imagine adding all of those to the BP_SaveGeame as variables, that's a nightmare. So it'd be cool to have some unified data structure/interface and an array of that data types inside of our SaveObejct. So you dont pass in like int Gold, rather ISaveableData Data represinting the values of the concrete object you want to save.
You can. Let us take the doors example. Add a door manager actor, make it implement saveable interface. It will save and load all the individual door states in an array in the save game.
Hello, thanks for the amazing tutorials, Do you have any video on how to manage animations on different weapons in an fps? I don't know if i am searching for the right video title
Not on the specific topic topic like that no. But watching the "create an RPG" series shows off different animations for different classes which may be close to what you are looking for.
In my game I have alot of things, for example apples. How do I save info on each apple? (most importatnly if it´s been eaten or not) I´ve tried to figure out to do it with array but failed. You´ve also mentioned in the comments of creating a "manager actor" Is that the way to go and if so could you describe what it is and what it does a bit more? Great tutorial and for us noobs It would be awesome with a part 2 where you explain how to use this system more hands on in a game. I would watch the sh*t out of that! ;-)
@@Starblendet It is nothing cimplicated. It is just a general concept in programming a class that manages other classes. You cna google manager class and you will likely find the idea described in detail.
Great tutorial It help me understand the interfaces, what would you need to change if you had multiple objects in the scene that need to be saved, when I used this on my game all the character just took the health from the first variable in the save game state, so they didnt load what their health was but just what the first object saved theirs as.
@@LeafBranchGames Nice I thought i would need some kind of ID system, Thanks i will look into this, I do have it working in a hacky way but its not as elegant as your system. Thanks again and best of luck!
If anyone is having an issue where the save data isn't loading, make sure you have a default value in the "SlotName" variable in your game instance. I missed that part and couldn't figure out why it wasn't working haha
Woooww awesome!! thanks for the very detail explanation. But i don't know why in my project work with simple variables (like the video) but with strucs don't save the data :( I'm trying to discover why at this moment.
well I find that save the struc variables but the problem is for load the character world position and camera rotation. Always set in the game start values...
Hello, first of all your tutorial is great, a nugget like you can find, but I followed your tutorial and during the first test I had an error, which told me this "accessed none trying to read property SaveGameRef" this came from the part with event request load in BP_GameInstance, thanks in advance😁
@@Havca_ Those errors can not be ignored. As the video explain, you are trying to interact with something that is not properly set. Which means something is not working. You may not notice it now, but you will at some point.
Please tell me, do you have a video where you show how to update a player’s HUD when loading a saved game? I have a situation where everything is saved, but when loading, the progress bars are not updated.
These are usually two separate things, that shouldn't be in conflict. The UI should just be displaying data, so as long as that saved and loaded data is done right, it should just be a matter of showing it.
I have an issue where I cant move when the scene switches. and lots of errors that says: Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph Game Inst Blueprint: GameInst Please Help!🙏🙏
I just tried migrating the tutorial to 5.4, it works perfectly fine. So it is not an engine version issue. This video explains what access none is: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
its a good system but its not so complex and not usable for most of the games here some complex things with save system: 1- we have some actors are spawnable or destroyable and we dont know how to save them because they are not exist in level 2- for example if we have one component called health and we used for enemies also we dont know how to save it and load it even if we spawned enemy 3- for example in my case i have building system in my game, i have to save all buildable actors in level and some of these buildable have their own data and components so how we can save it and load it? 4- using blueprints to save and load its really not a good system to use because if we have more than 1k actors in game and we want to save or load it will crash the game if we have a lot of data, C++ is best way to do save system
Thanks for the input. Unfortunately false. The system can handle all those cases and more of couse. Just to give one example, if you have a specific type of actors that you need to keep track of, maybe exploding barrels, which can be spawned and destroued. You can have a managing actor that keeps track of when and how to spawn these actors if they are destroyed. This manager is set to saveable and will create an array structure to save. Super easy.
I'm about to go trough this video as I see there is tons of positive feedback in the comments and I'm looking to upgrade my save system. Anyway, would you mind doing a video about properly storing data of actors that get spawned, picked up and dropped. For example, actors picked up inside inventory that shouldn't exist in the world after the game is relaunched or just actors that should spawn on the first begin play of that save data. I assume these are pretty complicated things that might be too hard to implement into a TH-cam tutorial format, or even properly with blueprints instead of C. I think @majule1 requested something similar in the comments, also Horror Engine marketplace asset has a pretty good save load system that also handles moveable actors by saving their transform, but not destructible and spawnable ones.
First of all thanks for the great tutorial. Everything works as shown. But I have a problem if anyone can help me. How can I save an instanced actor? Because if an actor tries to save a variable and it has instances they all use the same save state. What should I be trying to do to prevent that?
Nice and flexible. Have it saving my party, location, money and surprisingly...my stats lol. Well it was...loaded up today and it is not saving anything again...
of the player? Make a transform variable on the same game, on the save game on TPC set that variable to the actor transform of the TPC. Load is the verse. @@soldieroscar
having an issue you might be able to help with. If i create a new game, and then save, then load while still in the editor in works. IF i create a main menu with the setup in video, create new game, save, exit editor, then hit load game (after confirming the save file exist), it says SaveGameRef is empty still. Is this another isValid I need to add? Seems so but just kind of seems odd@@LeafBranchGames
@@jakespencer917 A save game reference is just a reference. You need to load the save game from the harddrive and point the savegame reference to that read information.
how does this handle things like items being spawned or destroyed from the world? Like say I have a map that has a sword on it that I put there in the editor, and I pick up that sword during runtime thus destroying the actor in the world, if I save, quit, then load again UE usually tends to load the default state from editor then apply any changes from the save game over the top of it, how would this save game system handle something like that? Or an alternative example, what happens if I drop a sword into the world that I started with, so it was an actor that didn't start in the world but now has been added and then saved and loaded. I've been trying to get around it using a GUID system but it's just getting more and more complex every time I add something.
@@LeafBranchGames Thanks. I really hope you do because the ability to save and load a game has been the BANE of my existence since I started my own project, In 3 days it's taken me from being excited about how far I've gotten to absolute burnout.
Great Video, Just What I was Looking for.🙏🏼✨ But how we can Save the Map Data ?! For an Example Let's say there is a Bag of Gold in Map - We Collect that Bag. Now we Save and Load The Game - The Bag of Gold will Spawn and We'll Have Infinate Gold Glitch. Same with Enemies, Collectables and Everything. How do we Save All of That !!? 🤔
Many different ways. If it is an object that is placed in the level to begin with, you can have it assigned a GUID and keep track in the save game in a simple structure with GUID and status (like taken). So when it loads in, it checks against its guid if it should be shown or not. Or you could have a manager object that keeps track of a bunch of these objects and it will be the one who saves/loads in which bags and other items should be taken or still available etc.
@@LeafBranchGames Thank you for Responding. I don't know what GUID is and I don't know how to do any of the things you just mentioned here in comment. 😅 Is this going to be in level blueprint btw ? And Are you Planning to make a video on this thing ? almost all Channels here are showing Bad Practices. It would be Extremely helpful if you make a video on this 🙏🏼
@@Mohit_N.R A GUID is an acronym for a GLobal Unique IDentifier. So an ID that you can use to uniquely identify something. If you have 200 identical swords in a game, you can have GUIDS to be able to pick out a specific one you need. Nothing would be in a level blueprint. A GUID would be designated by each object that should use one.
But doesnt the game instance once game has ended lose all data and that save game ref you create and set is no longer valid? Im geting a savegame REF invalid as my save game ref is coming back null on the calls. If I reload my game without stopping play its fine. if I stop play in editor and try and resume the null savegame ref is happening
So , start new game> create save game object> save the game and reload during play = fine. stop play in editor. start play and try to continue = SavegameobjectREF is null
ok update, where you cast to bp_savegame on the load data. if I pull the pin and re-set the the game instances "SaveGameREF" from that cast. its fine strange
A game instance does not keep the information between different play sessions. That is why we create a save game which is a physical file on the computer.
Not sure what you are talking about. It is demonstrated in the tutorial showing that it is saving health. If it is not saving for you, then you missed some part.
if im using take his res screenshot for the save game thumbnail, is there away to save the image into the save game data ? Or is it best to save the image separately from the save game data as its own file ? Thank you so much for this tutorial this was amazing ! Im deft going to be overhauling my save system using these fundamentals !
no im saying that in my save game function im first calling "Take High Res Screenshot node" and saving that to its own file. I havent been able to figure out how to save the image into the save game file itself not as its own file. But im not even sure thats the best route or the image should just be stored outside the save game file. For further clearance im talking about a thumbnail that the player captures at the time he makes a new save game file thats displayed in a load game widget for example.@@LeafBranchGames
I build this entire system and it all makes sense but when I go to put it to use on the default UE gun, I can't get it to stay with my player through levels if picked up. As soon as I go through my Open Level door and save, then load on begin play of next level blueprint, I still have nothing. I was able to get my gun to travel with me with one method using game instance, but I could not fire or spawn the weapons projectile. I've been struggling with this for a couple weeks now. Any further help is greatly appreciated.
Also have this error Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph Game Instance A2B Blueprint: GameInstanceA2B
@@SchriztopherGaming This video explains access none: th-cam.com/video/9PsoeBM82mk/w-d-xo.html You need to save all relevant data that you want to make use of. Before leaving the level, you need to "pack down" all the data in your save in a way that allows you to unpack it in the next level where you load it up again.
hey, just followed the tutorial and was trying to implement it into my game but its not working. I'm trying to store an array of objects but the player can delete them and it should save and then load them next time but its not.
I've been tryna work this out for hours and I have no Idea what I'm doing wrong. I've been triple checking everything, my scripts and the video. First I had the "Accessed None" Error on request load, so I had a look through the comments and the video you linked but I'm still not sure what causes it. If I put Create Save and Request load into the gamemode blueprint I don't get any errors, but if I move Request Load into my player character blueprint, I think it loads, but it wont save. If Create Save is in player character blueprint at all, I get "Accessed None". Do you have any idea what the issue could be?
Hello, so normally I followed the video correctly! But I'm having a few problems with the “load data for requester” which displays the following error: Blueprint Runtime Error: “Accessed None trying to read property pirateSaveGameRef”. Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph GI Pirate Blueprint: GI_Pirate. When I click on Continue nothing happens and on Save Game it freezes the game. What did I miss?
@@LeafBranchGamesHi thank you ! I don't get the error message anymore, when I click on Continue I restart from the beginning (it's like a restart level) and on Save Game it always freezes the game. Important: I have a level for the start menu with the “new game” button, then I switch to the game level.
Lmk if you fix this because I am having the same issue. I know WHAT accessed none means, I don't know WHY it's happening. Putting a validated get on "save game ref" doesn't actually help. I'm also getting the freeze when saving.
@@Lottie-e6m You have missed the whole point then. Putting a validated get isn't a solution. It is defensive coding to prevent unexpected errors that will cause the application to crash in runtime. The actual issue, is like described in the video, that you are trying to interact with an object reference you don't actually have a valid reference to.
Was wondering if i could use this to save certain items as collected. I see this can save totals, my project just has a couple collectibles i want to stay gone after they're picked up.
I have an issue when I build my game I can save the game and load it as long as I don't close it and reopen if i do it allows me to continue so the game knows of the save game but it just loads me outside of the map at what i can only assume to be 0,0,0 with no character
Hi, I've been trying to save the inventory offered by Epic (Adventure's Inventory Kit) for days but I really can't do it. I managed to save everything except the icon does not update when you open the inventory after restarting the game. And the equipment cannot be equipped (weapon and armor). Could you take a look at it please?
Nice tutorial, but I have a question. If in a level I have multiples items that can be picked up, and i want to save the GUID of those who have been picked up, how could I go about it?
@@kolbasa1234 It could be anywhere it makes sense. It could be an actor you place in the world if you only have only one level. If you have multiple levels you likely want to create it early when entering that new level so that you have it available.
@@LeafBranchGames Since there would be multiple levels i think the game instance maybe it's the best choice. Also, in the save game, I would only have to save the manager object itself right?
@@kolbasa1234No the manager is not there to be saved. The manager is there to keep track of the objects, in your case collectibles. So the manager saves/loads the objects.
...it doesnt seem to work with widgets...have a menue widget in wich I set dificulty setting but it won´t save! I´ve implemented the interface and the save data in the widget but it´s never called. Seems like the save all data loop doesnt register the widget to save it? Am I missing something or is there something that isnt working here?
It works with widgets. Widgets should ideally just display information that is stored elsewhere. So you load and save elsewhere and just show with widgets what the information looks like.
@@LeafBranchGames so a main menu where you save your settings should ideally not be stored in the menue Widget? Why is that? What you are saying seems very similar to my solution I wrote, to have another actor store/save the data that communicates with the widget. Or are you saying something else? Is ryandjins solution to use constructs better?
Hello again...Im having a weird issue where when I build the game it seems to remember a saved game that I can load without ever even created a savegame!? I have removed the savegame in the project folder before building...
Found it, seems "shipping" build stores the savefile here: C:\Users\\AppData\Local\\Saved\SaveGames Delete it and the build will start with no saved data
Hello, my problem 😢 Blueprint Runtime Error: "Accessed None trying to read property SaveGameref". Node: Load Data for Requested Graph: EventGraph Function: Execute Ubergraph BP Game Instance Blueprint: BP_GameInstance
Hey, thank you for your video. I followed your tutorial but i get an error when executing. It says "Accessed none trying to read property SaveGameRef. I don't understand why"
curious, what was your fix for this? I know what and how to use a get valid node, just not sure why it would work in the video without one but fail 100% of the time in my project. I am getting the same accessed none error when trying to read SaveGameRef and am truly lost on why this is occuring.@@Ampe96
Really excellent tutorial. I'm glad it's worked for others however I'm having these 2 errors (pasted below). Any help would be so appreciated. Thank you kindly. FYI I'm using the ALSv4 system (project) if that changes anything. ------- Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef_YT". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph GI Main Blueprint: GI_Main -------- Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef_YT". Node: Save All Data Graph: EventGraph Function: Execute Ubergraph GI Main Blueprint: GI_Main
@@LeafBranchGames Thank you for the link. From what I can tell, the issue is that it's not saving anything initially. I've retraced / followed your steps a second time and am still getting the errors. I'll attempt to do more troubleshooting but any other thoughts / tips would be greatly appreciated. Thanks again
@@AlexF_74 That should not be the take away from the video. The take away should be that you are using an object reference somwhere before it is actually referencing an object.
It doesn't work - you have , from the beggining "gold" - why, where - i don't know... 19:16 I don't have that... why? Is this continuation of any film? I tried to create new variables but in 20:29 i haven't "set" ... nothing want to conect with "target".. and it doesn't work...
Hello i've been trying to save my player on map. It kinda work but i have something i can't load properly. I'm saving and loading player transform but when i'm loading it reset the player rotation to 0 0 0. I've been trying with a vector too and it always get back to 0... are you aware of this issue ? Also, when i make a new game, due to the saving procedure, my player start at 0 0 0 location, do you know how i can make him start at any random player start ? Thanks a lot ! Great video
If your characters rotation is saved as 0,0,0 it will be loaded as 0,0,0 - just make sure to save the correct rotation and then load the correct rotation. It is not realted to the system in any way. If you want the character to start at a random start, first get the location he can start and then place him there either in the loading of the level or loading of the character.
@@LeafBranchGames Well insite my character i implement save and load from the interface and in the save i just get the actor world transform and set it in the savegameref, i do the same for the loading, and it's only one variable, a transform one, and it succeed to get the position but not the rotation, and it's still the same node ! I'm not saaving 0 at any time it's a blank project where nothing is done aside. When i print from Get game instance, save game ref, get player transform after i pressed save, it correctly display the new rotation, when i load, position is correctly loaded, rotation is back to 0, despite the fact is displayed somthing else than 0
@@Pierraxl The project and the save game system can not do anything it is not being told. If what you are saying to describe the situation is accurate, the best thing you can do is put breakpoints in your code and follow the code execution to see where in the code the 0,0,0 appears.
@@LeafBranchGames I tryed everything and still get my rotation back to 0. I managed to make it work by updating twice after a little delay this is weird. Do you know how i can set player position BEFORE anything from the save and load system happen and only on a new game ?
Am i doing something wrong? Because I am getting this error when I play the game: Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph BP Game Instance Blueprint: BP_GameInstance I have gone through the tutorial 2 times trying to see what did I do differently but it's all the same. It seems like the SaveGameRef node is not getting anything in the LoadDataForRequester function which is in the game instance. Any Help?
Yes, you are trying to use an object reference that is not referencing an object. This tutorial explains why you get the error: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
@@LeafBranchGames Hi! So to work off what this person was saying, I understand that the issue is the fact that it's not valid because it's not referencing an object. What I don't understand is 1) why you didn't have this issue in your tutorial and 2) how to fix it. I mean, if I make sure that if it's not valid, it makes a new reference to the save data, all the data that was saved gets undone. (So in the example of your video, it'll create another save game ref and then my gold will say it's 0 instead of 42)
@@fishwaterhazarddelta2434 The short answer is likely either that you missed something in the tutorial or you are doing something differently. So I can't really say how to solve it, because I don't know what you have done. The easiest way to find the root issue would be to debug your code, make sure that it is following the flow described in the tutorial and make sure your variables have values at the points it should be.
27:41 Damn I am right here and its not letting me reference self again. don't use this. if you follow other tutorials, it completely ruined whatever i had prior the video like my character selection screen got ruined.
I've watched this tutorial about 10 times since you posted it. Not only is this a great way to create a save system it also shows the best way to implement any manager class! So much good stuff in here thank you so much !
Thank you very much, both for the kind words and also the generous support. :)
Tutorials which accomplish a sub system like these are insanely valuable for beginners and certainly greatly appreciated!
Glad to hear it. :)
Getting a straight up full tutorial on creating a well-designed and upgradable save system is crazy.
I see a lot that people have difficulty turning the basic tutorials on save system into actual working systems. So I thought this would be very useful for many game devs.
@@LeafBranchGames it was a complement
@@gamedevofcoffeeandpower I know.
Seeing that cute ass Apu as top comment is crazy.
This was incredibly helpful. Probably the best tutorial that made 50min go incredibly fast. Thank you so so much, this is magnificent.
Glad to hear you liked it. :)
It's simply the best tutorial on the subject. It's important indeed to add some structs in order to save massive amount of Data.
Thank you so much
This is great and very timely, thank you. Too many tutorials only show how to save an individual variable or something which isn't wrong but not practical or scalable. I have a project in proof of concept phase still and realised the save system has to be baked in very early and to be honest started to seem quite daunting. This video is brilliant and it was great to know I was on the right track already but this way is simpler and more scalable than what I currently have. Thanks so much for this.
Glad to hear it could be helpful for your project!
I love this tutorial. Every other "save system" on youtube is like INCREDIBLY basic to the point that literally no game would use it at scale lol It also over relies on making a monolithic player blueprint. This is just the right amount of advanced that its useful for intermediates and modular that its something people would actually use. Its very hard finding stuff that isnt "so you just started learning game development!" or "here is how you from scratch re create unreals real time ray tracing system!" lol
Glad to hear you like it! These take a lot of time and care to try and get both informative, easy to use as well as being actually useful.
@@LeafBranchGames This one definitely hit all of them! I especially always like seeing using interfaces and events. They are so powerful but almost never used in videos. I didnt even know the use cases for these for a good portion when I was a beginner xd
@@IGiveTheBestTakes Yes. As a beginner it is impossible to distinguish between good or bad practice and the cost of doing someing easy now that will make it harder later and the other way around.
Dude my saving system turned into a shitstorm. Decided to use this instead and its crazy how simple and powerful this is. Thank you so much.
You are welcome, glad to hear it was useful to you! Good luck with your project!
I've been using this save system, as its probably one of the best ones out there. A tip for if your making a single player game, make sure you are calling load game on the gamemode, that way the game isn't passing along a null/empty save game to the actors on begin play.
This sounds like very important advise, but I'm not sure I follow! Can you elaborate a bit more? :) In the video he calls it on gameinstance, right? I've been trying to study the framework, what inherits from what and what spawns what. I think i understand part of it but its quite overwhelming still. I would love to learn more!
@ so within the game mode, get your game instance and call the load game function that you have. This will load the save data. If your confused as to what a game mode is, there’s documentation and other Reddit forms that’ll explain it better, but basically, it’s the class that will load in things like your player controller, default pawn, etc. It’s meant to keep track of high level game logic, like win conditions, scores, etc. I also personally use it to spawn in classes/actors, I know I will always need for the entire game session
Great tutorial as always! I would add my voice to a request for a part 2 with movable/destructible items and a manager for these. Say a sword which can be picked up in level 1 and dropped in level 3 or even characters which can killed or not and stay dead if you return to the level.
I will add it to my to do list.
This please! I'm trying to wrap my head around how to go about creating an observer/manager that will keep track of items that have been picked up but in a scalable way. I'm confused as to how to allow the designer to place objects in the scene and then have them not be loaded again later upon being picked up without a huge monolithic tmap or array of every item on the Save Game Object. And then to have the items level specific as well.
@@LeafBranchGames This would be awesome. I enjoy your save system so much!
I saw this video, watched it once, and saved it to watch when I got to that part and thank goodness I did. The previous tutorial I watched tried to implement a save game in the middle of an unrelated tutorial and I just skipped it, knowing I'd come back to this one and it'd work no matter what.
Thank you very much! Both for the compliment and the appreciation of my work. :)
Coming back to this months later, when looking for a solution to update my event driven UI. I basically used these same principles and changed the game instance to the HUD and save game file to just be a struct in the HUD. This struct acts as the save file data. When a widget requests ui data everything works the same way as the save system :) Its amazing really. My only concern was calling get all widgets with interface to much so I made a pool and just call that :) Again this video helped me understand how to build modular decoupled data systems and I thank you so much for it :)
Glad to hear the tutorial was educational for you!
I'm just gonna echo what everyone else has said. This aspect of game programming in general (managing the game state) has always been really intimidating for me but you just made it click so well with the "hey fill out this form" analogy
Glad to hear you found my approach something you could learn from. :)
Incredible video. Instant like and added to my playlist.
Thank you. :)
From the video it is easy to understand how the system works. Great job. But to be able to invent systems like this... I would feel like a genius. I wish I could be at your level, or at least half of it :D
I should quit smoking weed lol
All it takes is time and dedication, anyone can do it if they put in the work.
LBG upgrading his production quality. Very nice synopsis at the beginning.
Thank you. :)
the mic, and the no music background even if the music was cool are such an insane improvment cause i watched 3 time ur rpg serie and this is awesome u improved on that
cmon man the music was fine i was singing it while blueprinting
Those flow charts are incredible
High quality triple A stuff.
Wonderful. I'm not sure why I didn't watch this sooner. This is why I love it when you do system-building tutorials. This is perfect. I have one question though, how would you get this to work with other actors that depend on the Player character? For example, the player picks up three weapon actors, which are stored and attached to the character. What is the best step in getting those actors removed from the map and equipped to the proper slot upon loading the game after the weapon actors are picked up?
What is best depends wholly on a lot of details how you intend your project to work.
You want to get the data to load into your objects when it is relevant. This can be when a pawn is possessed, whan an actor is spawned, when a certain object reaches a certain state. You have to determine when is a good time to load (or save) data for your project based on what you are trying to achieve.
No começo do vídeo fiquei pensando será que não só mais um tutorial de como salvar o jogo, e vou te falar eu tentei algumas formas de fazer o salvamento do jogo seguindo alguns tutoriais no youtube, e realmente foi como você disse, somente esse seu vídeo funcionou no meu projeto, e não somente isso, me fez entender como funciona a lógica por trás de tla forma que sai configurando tudo que preciso salvar sem dificuldade alguma. Muito Obrigado.
Glad to hear it was helpful to you. :)
Thank you very much for the video!
Now I have a cool save system!
Enjoy!
your tutorials are so valuable, thanks very much. I expect to make a video about Steam Online Subsytem on future, if you want to make that. Thanks again, you are the best!
Thank you. :)
great solution design.
Thank you. :)
You are a life saver for this!!
Thank you. :)
Honestly one of the best tutorials on how to create a saved game, really scalable and adaptable to any project, but I have a question, casting the game instance and constantly hard referencing the Save Game object creates a lot of circular dependencies. Is there a way to keep this structure comfortable and at the same time solve the dependency problem?
Thank you!
There really isn't an issue here. The game instance is the single only class that you will always without exception have when you run your game. Regardless of what you do, this is true. So casting to it doesn't really matter other than for separation of code. The save game itself should likely not have a very large footprint, and that it is so closely tied to the game instance should not be an issue.
Awesome tutorial, keep it up!
Thank you!
What you are doing at 42:00 I suggest you just move that loop to the same location that the actor list is processed.
This will avoid needing to implement "system behaviour component responsibility" on individual actors.
I can recommend replacing individual values of serialized data with a struct.
That way, if you need to save Copper as well, you only need to add another variable to the struct. At least for larger objects with a lot of data.
One major topic that was not covered, I would like to see how this system deal with multiple instance data?
In that you have 4 enemies of the same type (blueprint). How can you save "one is damaged, one is dead, two are still default"?
My approach would probably be to look at having each actor implement a unique key based on ActorId. (Actor->GetObjectName)
To then look up a variable Map(String, Struct) from the SaveGame object which it can use to find a specific key aka. (Enemy_1, Enemy_2, etc...)
On another note, if you are looking for a node formatter to help speed up placement of nodes, I really recommend "Blueprint Assist".
It has saved me of countless perfectionist hours almost on a daily basis.
Yes, you could leverage the part of component save/load to not be the responsibility of the actor. That is not a bad idea.
Concerning variable data storage - yes, naturally you will be storing information in structs/arrays/etc as the information becomes more complex. The examples were simply examples to keep things simple to understand.
Multiple instance data would depend. It could be handled by a manager class or by unique actors. It all depends on how the game, levels, actors are meant to behave and spawn. I would opt for a GUID over an actor id in most cases.
Thanks for the tip on the blueprint assist. I have considered getting something to keep things cleaner, but I am leaning towards electronic nodes.
@@LeafBranchGames I can understand your argument about GUID, as two actors with the same ActorId from different levels would possibly intersect?
To my understanding, unreal does not have a proper GUID by defualt though. And you would need some plugin for it? I recall there being some hassle there when I looked into it.
My workaround was to include level name in the key. Which would make it highly unlikely that they ever have a conflict.
If you have some useful info on GUID I would love to hear that.
@@AleksanderFimreite I suppose that depends what you mean by proper GUID. But no, you don't need a plugin. There is a "new guid" node you can use.
@@LeafBranchGames What I meant by GUID is a key that stays the same from the moment the actor is placed in a level. This does not seem to be the case for a guid, as it makes a new one on the fly each time it is called. Also found this comment about it on reddit claiming that it is Editor Only, and not available in shipping builds. This property is a must have for a save system to recognize it as the same actor.
@@AleksanderFimreite I would not trust a random comment on reddit. I would verify that claim myself, because that sounds very dubious.
Simply amazing! Great job!
Thank you!
@@LeafBranchGames Played with that system for a while and ran into a few dead ends. Trying to resolve them myself but it would be nice to see a follow-up on this topic from you since the first iteration is very well-structured and works like a charm. The issues I'm referring to in particular are when multiple actors in a level need to save and load their respective data, how would you tell which actor gets what data? Furthermore, suppose we are talking about collectible items. How does one manage data saving if some of them were manually placed in a level but others could be spawned by dropping from the inventory and any of those could be picked up later as well? Clearly, we need to store a map with references to actors as keys, but the realization is quite complicated.
@@dzmitryyafimau7647I would suggest you create a manager to handle saving and loading those objects. If they are placed objects in the world, I would suggest using GUIDs to keep track of the unique objects.
Fantastic tutorial, watched it more times than I can count. I would love to see a follow up on this where you expand on the system. I'm having the noob issue of not knowing where to implement the loading of a saved current level into the system you've made. The first issue I'm facing is that I can't request the load of at the same time as my character is spawning. Feels like there should be a smart way to integrate an async level loading system inside the gameinstance, but I'm not sure and just crashing my engine while attempting. I'm also assuming that for expanding on the overall savegame data structure, the clenaest thing to do is to have a few different structs with data inside them (like player character data in one, and then maybe quest progress in another one and something else in another one, or what do you recommend?
very good. this is a nice setup. I think I understand my issue with my save system. I used the Get Player Pawn, get component of class method to then save all the variables and load. This works fine when actively playing the game and loading with debug tools, but I suspect when loading from the menu it forgets what the player pawn is, since you are no longer in possession of a pawn...so defaults to the gamemode class when loading. If i'm correct then adding some of your interface sections will fix this. I'll try sometime this weekend.
Hello this has been a yet again another wonderful video.. I do have a question how would you add save slots to this system?
It is just a matter of replacing the name for the save slot value. So it would very much depend on what type of save slot system you were creating. Since there are very many different approaches to how you could make use of slots. Most of the save system doesn't care what slot is used, only the actual events that interact with the file on disc.
if you ever do a follow up I would love to see how you would go about doing it You are such a valued part of this community thank you for all you do and I plan to show some support towards your work thank you for everything over the years.@@LeafBranchGames
Hello, this is a great tutorial, very well made and very helpful. However, I would like to expand it to be able to save a dynamic list of actors each with different properties. In my game I have an Item system where the player can create/delete/craft/... items. This means that the amount of Items and their different properties (each Item has its own properties, like a gun may have damage and ammo whereas a sword could have damage and reach) can be drastically different depending on game sessions and saves. This might also allow for a way to save multiple players in the case of a multiplayer game. Do you have any suggestions as to how to implement this in Unreal Engine 5? Apart from that this tutorial is great. Thank you very much!
multiplayer ??? rebuild the game in a real engine ;D i wouldnt use blueprints for multiplayer. Youll end up in spaghetti hell in 6 months
@@Infernal_toast use uefn for multiplayer style game
In honor of 999 silver, I was the 999th like on this yt video. I never comment, and rarely like videos. But this was top to bottom the best tutorial on a save game system in unreal engine
Thank you, for the kind words and support! :)
@@LeafBranchGames do you know how I could add functionality to save which level the player was at? and what player start in the level we should choose to spawn at? or perhaps you could add an additional tutorial on something like this or point me in the right direction?
Excellent !
Thank you. :)
Thanks!
Thank you very much for your support. It is very appreciated!
Thank you very much
My pleasure!
It's clearly a great system. I've rechecked mine twice over a few hours, but mine doesn't work. No errors. Just doesn't save. I'm debugging now. Hopefully if I find anything, ill let people know in case it happens to someone else.
Edit:
OK if anyone else has the same issue I have, I was using a widget not an actor. So to get all actors with interface obviously won't work. That needs to be swapped for get all widgets with interface and it works fantastically.
Ive Made another project using this method and it doesnt work again xD. Urgh for future me...Write it here when you figure it out.
you know the vibes if you use 42 as test values
:)
Thank you, I love your content!
To make this fully scalable, would be great to be able to add objects that the SaveGame doesn't even know, but the ones that implement the interface do.
So SaveGame will have data in the form of objects with an identifier, and then, when loading, the objects will search for that data and fill themselves. This way we don't need to add each variable to the SaveGame and it doesn't end up being a big list of variables.
The way you did is easier to implement, and usable for small - medium projects, I'm just sharing possible ways to make it more scalable :)
I would claim this works for larger projects as well.
It can handle objects it doesn't know of. Gold and silver are just simple examples. But if you want to handle more advanced types you just add structures and arrays.
Hey sorry to butt into your comment, @sebastianavena9919.
Can you elaborate more on: "be able to add objects that the SaveGame doesn't even know, but the ones that implement the interface do." and "SaveGame will have data in the form of objects with an identifier, and then, when loading, the objects will search for that data and fill themselves. This way we don't need to add each variable to the SaveGame and it doesn't end up being a big list of variables."?
From my understanding with this tutorial, say I have inherited SaveGame object that will be used for saving that will have a TMap consisting of some sort of FString or an FGameplayTag as key (identifier) that maps to an object as the value of the TMap itself.
So when you actually need to put value into the inherited SaveGame object, you just have to add it to the TMap with the key value pair ,then when you'd like to 'load' the data from the SaveGame object, you'd simply pass the key to some sort of Load function and if there exist an object with the key, you assign the value retrieved from the SaveGame object. Am I correct? I feel like I might have got the logic wrong as I feel like I still have to 'assign' the retrieved value after I load the SaveGame object to the Saveable object that needs to know the already saved value.
Thank you!
Thanks a lot man!
❤
Amazing!! youre a genius!! TAKKKKKKKKKKKKK
Thank you. :)
Hey mate AWESOME video !!! ❤
Could you please make a player skill unlocking system 😢
Thank you! You may want to watch the Create an RPG series I have then. Most parts for such a system is done there.
Thanks! I too appreciate your tutorial and wanted to say it is both dense and simple and yet powerful. I do have a question though. I'm tracking time and a day count in my game instance but since it's not an object, what would be the best way to do this with your system? Should I move it to another Blueprint?
Thank you for both the kind words and support! :)
You could have it in game instance if you want to, but you can't use the same logic as it uses now. You would have to hook on to save the time on save and load the time when load is called.
Or you could like you say have some class that manages this, it kind of depends on your game. Either way is perfectly fine, use the one you find the most convenient and usuable.
I had an issue for the loading request i think but about to do this again in a new 5.1 project to hopefully have it set up right for expansion into a project
im pausing for the night on the second time thru this at 36:42 and the continue button doesn't wanna do anything after i try to save a game and not sure where its wrong at
@@pHaace You can add the "does save game exist" to check that the save game you are trying to load first. If it doesn't, then you have not created it. If it does exist, but it doesn't seem to do anything, then you either are not loading things or the values you are trying to load are not correct in the save game structure. Then you need to debug.
very nice. having some issues with saving the world state. like say a cargo box location i dropped
Try making a manager class to keep track of the actors you are interested in.
Love the tutorial. Very straight and to the point. In my project my character is able to spawn a ton of different objects, each one with their own properties to save, including its location. I assume that I can just add the Interface to each spawned instance and so they will all become savable when called, and each will fill out their data as requested.
Question 1: how to save the objects location
Question 2: does adding the interface to the spawned object mean each spawned object will be spawned back in place?
I love your tutorials, have learned a lot. Still an absolute noob so please forgive me if this has been asked, how would I go about integrating this into your RPG system framework? I got totally lost when it got to the attributes portion and haveve no clue how to integrate the two systems.
Since all games operate differently and have different needs when it comes to how data is to be handled, there is no one answer to this. As a general instruction, you want to have a translation step to allow your data to be loaded/saved in a consistent manner as well as happening at times that are relevant for the gameplay to keep track and make use of the save information.
@@LeafBranchGames Thank you, no idea how to do that but at least I know it's possible.
@@samuraioni Take it one step at a time and you should be fine.
@@LeafBranchGames I think i figured out a way to do it, you mentioned using structures so I am going to give that a shot. But I don't know if you've encountered this error though: Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: LoadDataForRequester Graph: EventGraph Function: Execute Ubergraph BP Game Instance Blueprint: BP_GameInstance
@@samuraioni This explains your error: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
Anyone having an issue with the accessed none on save game ref - if this isn't the first tutorial you've tried try deleting your built up save files in saved/ save game in your project files.
Thanks! If i may, it's scalable, but only to a certain extent, say for your character's data. But often you have like hundreds of saveable objects on a level, such as doors you've opened, objects you've moved, triggers you've triggered. Each one of them must save their position/state/whatever else.
Imagine adding all of those to the BP_SaveGeame as variables, that's a nightmare. So it'd be cool to have some unified data structure/interface and an array of that data types inside of our SaveObejct. So you dont pass in like int Gold, rather ISaveableData Data represinting the values of the concrete object you want to save.
You can.
Let us take the doors example.
Add a door manager actor, make it implement saveable interface. It will save and load all the individual door states in an array in the save game.
Hello, thanks for the amazing tutorials,
Do you have any video on how to manage animations on different weapons in an fps? I don't know if i am searching for the right video title
Not on the specific topic topic like that no. But watching the "create an RPG" series shows off different animations for different classes which may be close to what you are looking for.
Jävligt bra tutorial. Trots att jag är rätt så färsk på UE så förstår jag det mesta, jag måste bara sätta mig in allt du gick igenom.
Thank you. :)
In my game I have alot of things, for example apples. How do I save info on each apple? (most importatnly if it´s been eaten or not)
I´ve tried to figure out to do it with array but failed. You´ve also mentioned in the comments of creating a "manager actor" Is that the way to go and if so could you describe what it is and what it does a bit more?
Great tutorial and for us noobs It would be awesome with a part 2 where you explain how to use this system more hands on in a game. I would watch the sh*t out of that! ;-)
I will probably make a followup video showing some use cases.
@@LeafBranchGames That would be awesome....meantime could you point me right direction?
@@Starblendet It is nothing cimplicated. It is just a general concept in programming a class that manages other classes. You cna google manager class and you will likely find the idea described in detail.
@@LeafBranchGames Thanks so much!
Great tutorial It help me understand the interfaces, what would you need to change if you had multiple objects in the scene that need to be saved, when I used this on my game all the character just took the health from the first variable in the save game state, so they didnt load what their health was but just what the first object saved theirs as.
You would need GUIDs to use as identifying keys to find the object specific information to load/save.
@@LeafBranchGames Nice I thought i would need some kind of ID system, Thanks i will look into this, I do have it working in a hacky way but its not as elegant as your system.
Thanks again and best of luck!
@@Memeseco Good luck!
Thanks so much. How would you tackle a save system for graphic / scalability settings?
Probably as a separate save file, since it is not really relevant for the other save data.
If anyone is having an issue where the save data isn't loading, make sure you have a default value in the "SlotName" variable in your game instance. I missed that part and couldn't figure out why it wasn't working haha
Woooww awesome!! thanks for the very detail explanation. But i don't know why in my project work with simple variables (like the video) but with strucs don't save the data :( I'm trying to discover why at this moment.
well I find that save the struc variables but the problem is for load the character world position and camera rotation. Always set in the game start values...
You can find others having the same issue as you in the comment section.
@@LeafBranchGames thanks!!! I find the problem!!! I miss some step jejeje Awasome tutorials!!! Thanks a lot!!!
@@makoto_shibari Glad to hear you solved it!
Hello, first of all your tutorial is great, a nugget like you can find, but I followed your tutorial and during the first test I had an error, which told me this "accessed none trying to read property SaveGameRef" this came from the part with event request load in BP_GameInstance, thanks in advance😁
This video explains that problem th-cam.com/video/9PsoeBM82mk/w-d-xo.html
@@LeafBranchGames thanks a lot, now it works but I still get the error, I guess it should still do it 😂
@@Havca_ Those errors can not be ignored. As the video explain, you are trying to interact with something that is not properly set. Which means something is not working. You may not notice it now, but you will at some point.
Can you please make a video about how I can save and load a game level?
Please tell me, do you have a video where you show how to update a player’s HUD when loading a saved game?
I have a situation where everything is saved, but when loading, the progress bars are not updated.
These are usually two separate things, that shouldn't be in conflict. The UI should just be displaying data, so as long as that saved and loaded data is done right, it should just be a matter of showing it.
@@LeafBranchGames
Thanks. I fixed progress bars
@@iGameDesign Glad to hear you solved it!
25:00,
27:00,
28:35
33:30
39:40
I have an issue where I cant move when the scene switches. and lots of errors that says:
Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph Game Inst Blueprint: GameInst
Please Help!🙏🙏
getting same error UE 5.4
@@Chatmanstreasure :(
I just tried migrating the tutorial to 5.4, it works perfectly fine. So it is not an engine version issue.
This video explains what access none is: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
@@LeafBranchGames I fixed it and get no error now put I still can't move when I press "start new"
@@TheOnlyKaas Moving doesn't really have anything to do with a save game. Make sure you have basics working like proper game controller etc.
its a good system but its not so complex and not usable for most of the games
here some complex things with save system:
1- we have some actors are spawnable or destroyable and we dont know how to save them because they are not exist in level
2- for example if we have one component called health and we used for enemies also we dont know how to save it and load it even if we spawned enemy
3- for example in my case i have building system in my game, i have to save all buildable actors in level and some of these buildable have their own data and components so how we can save it and load it?
4- using blueprints to save and load its really not a good system to use because if we have more than 1k actors in game and we want to save or load it will crash the game if we have a lot of data, C++ is best way to do save system
Thanks for the input. Unfortunately false.
The system can handle all those cases and more of couse.
Just to give one example, if you have a specific type of actors that you need to keep track of, maybe exploding barrels, which can be spawned and destroued. You can have a managing actor that keeps track of when and how to spawn these actors if they are destroyed. This manager is set to saveable and will create an array structure to save. Super easy.
I'm about to go trough this video as I see there is tons of positive feedback in the comments and I'm looking to upgrade my save system. Anyway, would you mind doing a video about properly storing data of actors that get spawned, picked up and dropped. For example, actors picked up inside inventory that shouldn't exist in the world after the game is relaunched or just actors that should spawn on the first begin play of that save data. I assume these are pretty complicated things that might be too hard to implement into a TH-cam tutorial format, or even properly with blueprints instead of C. I think @majule1 requested something similar in the comments, also Horror Engine marketplace asset has a pretty good save load system that also handles moveable actors by saving their transform, but not destructible and spawnable ones.
I can add it to my to do list.
@@LeafBranchGames Thank you, would greatly appreciate it since there is no proper method done on the net.
my inputs are not working when I load the game through "Continue" (game still saved tho) how can I fix it?
Okay nvm I got it I am just an idiot and your tutorial made some idiot like me even can do something, thanx alot
I have that problem...
First of all thanks for the great tutorial. Everything works as shown.
But I have a problem if anyone can help me. How can I save an instanced actor? Because if an actor tries to save a variable and it has instances they all use the same save state. What should I be trying to do to prevent that?
Nice and flexible. Have it saving my party, location, money and surprisingly...my stats lol.
Well it was...loaded up today and it is not saving anything again...
Good stuff!
How do you save the location?
of the player? Make a transform variable on the same game, on the save game on TPC set that variable to the actor transform of the TPC. Load is the verse.
@@soldieroscar
having an issue you might be able to help with. If i create a new game, and then save, then load while still in the editor in works.
IF i create a main menu with the setup in video, create new game, save, exit editor, then hit load game (after confirming the save file exist), it says SaveGameRef is empty still.
Is this another isValid I need to add? Seems so but just kind of seems odd@@LeafBranchGames
@@jakespencer917 A save game reference is just a reference. You need to load the save game from the harddrive and point the savegame reference to that read information.
how does this handle things like items being spawned or destroyed from the world? Like say I have a map that has a sword on it that I put there in the editor, and I pick up that sword during runtime thus destroying the actor in the world, if I save, quit, then load again UE usually tends to load the default state from editor then apply any changes from the save game over the top of it, how would this save game system handle something like that?
Or an alternative example, what happens if I drop a sword into the world that I started with, so it was an actor that didn't start in the world but now has been added and then saved and loaded.
I've been trying to get around it using a GUID system but it's just getting more and more complex every time I add something.
Should handle it fine. You can have a manager class that keeps track of items like that in the world.
@@LeafBranchGames could you make a tutorial on how to set up such a manager class and integrate it with this save system? because IDK how that works.
@@louthinator Maybe. We will see. Stay tuned.
@@LeafBranchGames Thanks. I really hope you do because the ability to save and load a game has been the BANE of my existence since I started my own project, In 3 days it's taken me from being excited about how far I've gotten to absolute burnout.
@@louthinator Were you ever able to find a solution for this?
Great Video, Just What I was Looking for.🙏🏼✨ But how we can Save the Map Data ?!
For an Example Let's say there is a Bag of Gold in Map - We Collect that Bag. Now we Save and Load The Game - The Bag of Gold will Spawn and We'll Have Infinate Gold Glitch. Same with Enemies, Collectables and Everything. How do we Save All of That !!? 🤔
Many different ways. If it is an object that is placed in the level to begin with, you can have it assigned a GUID and keep track in the save game in a simple structure with GUID and status (like taken). So when it loads in, it checks against its guid if it should be shown or not.
Or you could have a manager object that keeps track of a bunch of these objects and it will be the one who saves/loads in which bags and other items should be taken or still available etc.
@@LeafBranchGames Thank you for Responding. I don't know what GUID is and I don't know how to do any of the things you just mentioned here in comment. 😅 Is this going to be in level blueprint btw ? And Are you Planning to make a video on this thing ? almost all Channels here are showing Bad Practices. It would be Extremely helpful if you make a video on this 🙏🏼
@@Mohit_N.R A GUID is an acronym for a GLobal Unique IDentifier. So an ID that you can use to uniquely identify something. If you have 200 identical swords in a game, you can have GUIDS to be able to pick out a specific one you need.
Nothing would be in a level blueprint. A GUID would be designated by each object that should use one.
@@LeafBranchGames Noted, I have to do Research on this to understand more. Seems complicated - I do Hope you'll make a video on this tho. 🙏🏼✨
Everything is fine but It always shows me the errors: Accessed none trying to read [My Variables].
what is the problem!?
This is the problem th-cam.com/video/9PsoeBM82mk/w-d-xo.html
But doesnt the game instance once game has ended lose all data and that save game ref you create and set is no longer valid?
Im geting a savegame REF invalid as my save game ref is coming back null on the calls.
If I reload my game without stopping play its fine. if I stop play in editor and try and resume the null savegame ref is happening
So , start new game> create save game object> save the game and reload during play = fine.
stop play in editor. start play and try to continue = SavegameobjectREF is null
ok update, where you cast to bp_savegame on the load data. if I pull the pin and re-set the the game instances "SaveGameREF" from that cast. its fine strange
A game instance does not keep the information between different play sessions. That is why we create a save game which is a physical file on the computer.
did yo ever fix this? im having the same issue
Does anyone know why the Health variable isn't saving? The gold and silver saves, but not the Health float.
Not sure what you are talking about. It is demonstrated in the tutorial showing that it is saving health. If it is not saving for you, then you missed some part.
great save sys ! if u dont mind explain how can i save player location ? tnx so much
You create a vector variable in the save game and save/load that variable from your player on the appropriate events.
@@LeafBranchGames Tnx it worked!!! Ur a legend ❤
if im using take his res screenshot for the save game thumbnail, is there away to save the image into the save game data ? Or is it best to save the image separately from the save game data as its own file ? Thank you so much for this tutorial this was amazing ! Im deft going to be overhauling my save system using these fundamentals !
I am not sure I am following. You want my thumbnail in your save game?
Glad to hear the save system was useful to you!
no im saying that in my save game function im first calling "Take High Res Screenshot node" and saving that to its own file. I havent been able to figure out how to save the image into the save game file itself not as its own file. But im not even sure thats the best route or the image should just be stored outside the save game file. For further clearance im talking about a thumbnail that the player captures at the time he makes a new save game file thats displayed in a load game widget for example.@@LeafBranchGames
@@ryanjdevlin87 Gotcha. I don't know since I have not tried that before. I would have to experiment.
I build this entire system and it all makes sense but when I go to put it to use on the default UE gun, I can't get it to stay with my player through levels if picked up. As soon as I go through my Open Level door and save, then load on begin play of next level blueprint, I still have nothing.
I was able to get my gun to travel with me with one method using game instance, but I could not fire or spawn the weapons projectile. I've been struggling with this for a couple weeks now. Any further help is greatly appreciated.
Also have this error Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph Game Instance A2B Blueprint: GameInstanceA2B
@@SchriztopherGaming This video explains access none: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
You need to save all relevant data that you want to make use of. Before leaving the level, you need to "pack down" all the data in your save in a way that allows you to unpack it in the next level where you load it up again.
hey, just followed the tutorial and was trying to implement it into my game but its not working. I'm trying to store an array of objects but the player can delete them and it should save and then load them next time but its not.
I've been tryna work this out for hours and I have no Idea what I'm doing wrong. I've been triple checking everything, my scripts and the video. First I had the "Accessed None" Error on request load, so I had a look through the comments and the video you linked but I'm still not sure what causes it. If I put Create Save and Request load into the gamemode blueprint I don't get any errors, but if I move Request Load into my player character blueprint, I think it loads, but it wont save. If Create Save is in player character blueprint at all, I get "Accessed None". Do you have any idea what the issue could be?
Hello, so normally I followed the video correctly! But I'm having a few problems with the “load data for requester” which displays the following error: Blueprint Runtime Error: “Accessed None trying to read property pirateSaveGameRef”. Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph GI Pirate Blueprint: GI_Pirate.
When I click on Continue nothing happens and on Save Game it freezes the game.
What did I miss?
This explains your error: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
@@LeafBranchGamesHi thank you ! I don't get the error message anymore, when I click on Continue I restart from the beginning (it's like a restart level) and on Save Game it always freezes the game.
Important: I have a level for the start menu with the “new game” button, then I switch to the game level.
Lmk if you fix this because I am having the same issue. I know WHAT accessed none means, I don't know WHY it's happening. Putting a validated get on "save game ref" doesn't actually help.
I'm also getting the freeze when saving.
@@Lottie-e6m You have missed the whole point then. Putting a validated get isn't a solution. It is defensive coding to prevent unexpected errors that will cause the application to crash in runtime.
The actual issue, is like described in the video, that you are trying to interact with an object reference you don't actually have a valid reference to.
Was wondering if i could use this to save certain items as collected. I see this can save totals, my project just has a couple collectibles i want to stay gone after they're picked up.
Yes, it can be used for that.
I have an issue when I build my game I can save the game and load it as long as I don't close it and reopen if i do it allows me to continue so the game knows of the save game but it just loads me outside of the map at what i can only assume to be 0,0,0 with no character
Hi, I've been trying to save the inventory offered by Epic (Adventure's Inventory Kit) for days but I really can't do it. I managed to save everything except the icon does not update when you open the inventory after restarting the game. And the equipment cannot be equipped (weapon and armor). Could you take a look at it please?
Nice tutorial, but I have a question. If in a level I have multiples items that can be picked up, and i want to save the GUID of those who have been picked up, how could I go about it?
Create a manager class that handles the saving and loading of those objects.
@@LeafBranchGames And this manager class where should I instantiate it, inside the GameInstance? Sorry, I'm a bit lost at this
@@kolbasa1234 It could be anywhere it makes sense. It could be an actor you place in the world if you only have only one level. If you have multiple levels you likely want to create it early when entering that new level so that you have it available.
@@LeafBranchGames Since there would be multiple levels i think the game instance maybe it's the best choice. Also, in the save game, I would only have to save the manager object itself right?
@@kolbasa1234No the manager is not there to be saved. The manager is there to keep track of the objects, in your case collectibles. So the manager saves/loads the objects.
...it doesnt seem to work with widgets...have a menue widget in wich I set dificulty setting but it won´t save! I´ve implemented the interface and the save data in the widget but it´s never called. Seems like the save all data loop doesnt register the widget to save it? Am I missing something or is there something that isnt working here?
its uses get all actors with interface in the game instance so it will never find widgets. See my recent comment for how I made this work for widgets
@@ryanjdevlin87 thanks alot.... actually I think I'm gonna create an actor that stores the data which the widget can get and send info to....
It works with widgets. Widgets should ideally just display information that is stored elsewhere. So you load and save elsewhere and just show with widgets what the information looks like.
@@LeafBranchGames so a main menu where you save your settings should ideally not be stored in the menue Widget? Why is that? What you are saying seems very similar to my solution I wrote, to have another actor store/save the data that communicates with the widget. Or are you saying something else?
Is ryandjins solution to use constructs better?
Hello again...Im having a weird issue where when I build the game it seems to remember a saved game that I can load without ever even created a savegame!? I have removed the savegame in the project folder before building...
Found it, seems "shipping" build stores the savefile here: C:\Users\\AppData\Local\\Saved\SaveGames
Delete it and the build will start with no saved data
Glad to hear you sorted out your issue!
I´m a noob...How would I go about saving and loading objects in the gameworld? for example apples in an open world?
Similar questions to this has been asked before, you can find the answer among the comments.
@@LeafBranchGames thank you kindly sir and for a great tutorial!!!
Hello, my problem 😢 Blueprint Runtime Error: "Accessed None trying to read property SaveGameref". Node: Load Data for Requested Graph: EventGraph Function: Execute Ubergraph BP Game Instance Blueprint: BP_GameInstance
This video explains the issue: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
can you please guide me on how to save the level name if you have multiple levels in your game
I think you can save it as a string and then call it
Hey, thank you for your video. I followed your tutorial but i get an error when executing. It says "Accessed none trying to read property SaveGameRef. I don't understand why"
This video explains the issue: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
@@LeafBranchGames thanks, i fixed it. now i'm having a hard time understanding how to save objects located in the world, but i'll figure it out
how you fixed it?@@Ampe96
curious, what was your fix for this? I know what and how to use a get valid node, just not sure why it would work in the video without one but fail 100% of the time in my project. I am getting the same accessed none error when trying to read SaveGameRef and am truly lost on why this is occuring.@@Ampe96
How can I make it so my continue button recognizes the last used save slot? I have set up a multiple save file system based off of this tutorial
It is just a name/string. So all you need to do is make a function to get that name and use that instead.
@@LeafBranchGames Where should this function be? Because I have tried this
@@GhostViper69In the game instance is fine.
@@LeafBranchGames I'll play around with it some more. Thank you for the help, and good job on the tutorial!
@@GhostViper69 Good luck!
Really excellent tutorial. I'm glad it's worked for others however I'm having these 2 errors (pasted below). Any help would be so appreciated. Thank you kindly. FYI I'm using the ALSv4 system (project) if that changes anything. ------- Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef_YT". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph GI Main Blueprint: GI_Main -------- Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef_YT". Node: Save All Data Graph: EventGraph Function: Execute Ubergraph GI Main Blueprint: GI_Main
This video should explain things for you: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
@@LeafBranchGames Thank you for the link. From what I can tell, the issue is that it's not saving anything initially. I've retraced / followed your steps a second time and am still getting the errors. I'll attempt to do more troubleshooting but any other thoughts / tips would be greatly appreciated. Thanks again
@@AlexF_74 That should not be the take away from the video. The take away should be that you are using an object reference somwhere before it is actually referencing an object.
@@LeafBranchGames Understood. Thanks again
@@AlexF_74 No worries. Good luck!
It doesn't work - you have , from the beggining "gold" - why, where - i don't know...
19:16 I don't have that... why? Is this continuation of any film?
I tried to create new variables but in 20:29 i haven't "set" ... nothing want to conect with "target".. and it doesn't work...
You probably missed that part in the tutorial.
31:13 you tried it off of the reference but it cant have an object reference
Yes, I know.
i'm trying to make a trigger when you touch it you save but what block do i use for this? 17:19
What do you mean? At any event trigger you want, you can just call the save functionality.
@@LeafBranchGames oh
Will this work for multiplayer?
Yes.
Hello i've been trying to save my player on map. It kinda work but i have something i can't load properly. I'm saving and loading player transform but when i'm loading it reset the player rotation to 0 0 0. I've been trying with a vector too and it always get back to 0... are you aware of this issue ?
Also, when i make a new game, due to the saving procedure, my player start at 0 0 0 location, do you know how i can make him start at any random player start ?
Thanks a lot ! Great video
If your characters rotation is saved as 0,0,0 it will be loaded as 0,0,0 - just make sure to save the correct rotation and then load the correct rotation. It is not realted to the system in any way.
If you want the character to start at a random start, first get the location he can start and then place him there either in the loading of the level or loading of the character.
@@LeafBranchGames Well insite my character i implement save and load from the interface and in the save i just get the actor world transform and set it in the savegameref, i do the same for the loading, and it's only one variable, a transform one, and it succeed to get the position but not the rotation, and it's still the same node ! I'm not saaving 0 at any time it's a blank project where nothing is done aside.
When i print from Get game instance, save game ref, get player transform after i pressed save, it correctly display the new rotation, when i load, position is correctly loaded, rotation is back to 0, despite the fact is displayed somthing else than 0
@@Pierraxl The project and the save game system can not do anything it is not being told. If what you are saying to describe the situation is accurate, the best thing you can do is put breakpoints in your code and follow the code execution to see where in the code the 0,0,0 appears.
@@LeafBranchGames I tryed everything and still get my rotation back to 0. I managed to make it work by updating twice after a little delay this is weird.
Do you know how i can set player position BEFORE anything from the save and load system happen and only on a new game ?
@@Pierraxl The begin play even will happen before the load, since it is the one asking for loading info.
Will this save coins and all lives no matter what the level?
Yes.
Am i doing something wrong? Because I am getting this error when I play the game:
Blueprint Runtime Error: "Accessed None trying to read property SaveGameRef". Node: Load Data for Requester Graph: EventGraph Function: Execute Ubergraph BP Game Instance Blueprint: BP_GameInstance
I have gone through the tutorial 2 times trying to see what did I do differently but it's all the same. It seems like the SaveGameRef node is not getting anything in the LoadDataForRequester function which is in the game instance.
Any Help?
Yes, you are trying to use an object reference that is not referencing an object. This tutorial explains why you get the error: th-cam.com/video/9PsoeBM82mk/w-d-xo.html
@@LeafBranchGames Hi! So to work off what this person was saying, I understand that the issue is the fact that it's not valid because it's not referencing an object. What I don't understand is 1) why you didn't have this issue in your tutorial and 2) how to fix it. I mean, if I make sure that if it's not valid, it makes a new reference to the save data, all the data that was saved gets undone. (So in the example of your video, it'll create another save game ref and then my gold will say it's 0 instead of 42)
@@fishwaterhazarddelta2434 The short answer is likely either that you missed something in the tutorial or you are doing something differently. So I can't really say how to solve it, because I don't know what you have done. The easiest way to find the root issue would be to debug your code, make sure that it is following the flow described in the tutorial and make sure your variables have values at the points it should be.
@@LeafBranchGames ah thank you. I did do some debugging (though before your comment, whoops) and I did find the issue!
@@fishwaterhazarddelta2434 Glad to hear you sorted it out. What was the problem?
Will this work on 4ue?
Yes.
Includes everything except for including to save the level and player location and rotation :(
Gah damn your voice a lot more deeper and crisper wtf
I was very sick when creating the project and while recording it. My voice has been through hell and back lately.
27:41 Damn I am right here and its not letting me reference self again. don't use this. if you follow other tutorials, it completely ruined whatever i had prior the video like my character selection screen got ruined.
Not sure what you are talking about. But a save system and a character selection are seperate parts, and don't break the other.