[PLUGIN] USQLite

That’s class default , archetype, then your actual instance.

The default and archetype will be empty values, they are spawned and destroyed by the Editor many times depending on what assets you open, this is not a problem.

As far as I understand I’ll create versions in the database object and then I’ll set my desired version with blueprints. After I set the version whatever I load or save will be applied to that version, right?

There is a scenerio came to my mind, not sure if it’s the correct approach.

If I wanted to remove “SaveGame2” in the main menu, I would have to first set the version to “SaveGame2” and then remove everything.

Or if I wanted to display each one of the save game name in the main menu, I’d need to load them one by one and get the information and set the widgets. Or different save file for save names, played time etc.

No, I will add a node to destroy tables.

And existing tables (versions) you can get as an array of strings.

Sounds cool, looking forward to get my hands on it and give my feedback :slight_smile:

With these nodes one can control tables from UI widgets.
There’s also a “Has Version” node to check if a table exist.
Will submit updated code to marketplace staff:

1 Like

is save all the only way to do threaded save? i assume issuing an immediate save on component is not the best way?

Try to set your Database class to execute commands as a background task:



Then subscribe to “On Finish Data Save/Load” delegates:

Be warned that working with threaded actions makes your code more complicated and bugs require more experience to track.

You often have to track the state of your thread when you enabled threaded background task on DB:

DB_ThreadState


BTW… I think I can improve the speed of Immediate Saves when DB is marked as background, I will take a look where I can make it smoother this weeked.

awesome, thanks, will wait to see if something like that is needed.

is there a way to read/write to the DB without being attached by actor/component? I want to save dynamically spawned actors, then on game load, read from the table and have the gamemode spawn them in the level.

You can manually use Generate/Unpack nodes and ‘Add Command to Queue’:

SQLite nodes


But if you want a custom load mechanisms without any pointer to Actor or Property, you have to know C++ and do your custom loading from there.


The update (1.9.0) that improves the setup mentioned above is finally released for Unreal 4.26;

if your DB Class is set to work as a 'Background Task ', then Immediate Save/Load nodes will now work asynchronously.

Apparently several new developers are having a hard time wrapping the concepts behind this. So I have decided I will block records of CDOs in upcoming update.

Some might be recording Editor-only objects, if you do then you will have to spawn instances because I will no longer support CDOs (to make new users life easier).

I’ve completed work on v2…
Submitted and waiting for review from Marketplace staff.
This version is for Unreal 4.26+.

There are structural changes in this version.
I removed the blueprint exposed On Progress events and threaded nodes to prevent blueprint users from causing random crashes.

In v2, all the Unpack Data process was moved to native code, so these nodes are no longer usable on Blueprints:


I also have completely reworked the async loading system, to improve performance.
(I mean this system):


These changes might require a bit of refactor to your Blueprints, but the performance, so far I have experienced:

  • 800% performance increase when Async Saving whole level.
  • 400% performance increase when Async Loading whole level.

But the gains diminishes the more nested UObjects (weapons, inventory, etc) must be serialized.

Overall, I think it’s worth it, the refactoring hassle.

Hi Bruno,

I’m new to Unreal and am hoping to use your plugin to help me out (I have already purchased it). I was wondering if you could advise me on something. I am looking to make an interactive game that will have many users. The idea will be that users enter a chat command during a live stream and a character is created for them. I would like the game to have a database to store each players inventory and points, the typical stuff you would see in an MMO. As the game plays the characters will gain points, XP and historical data for number of games played and kills etc.

Is that a suitable use case for your plugin? The data for each player would have to be created and updated constantly as the game is running.

Thanks for any help/advice you can offer on this!

Yes, you just have to make sure each ‘DBID’ (Name property) value is equal to the unique user ID for each registered user account.

I have completed today the porting of this tool to Unreal 5.P2 with support for double precision floats and fixed internal warnings caused by many other changes in UE5 Preview 2 source.

Plugin for Unreal 5 has been released.
Thank you Epic!

Hey Bruno! I was wondering if it was possible for me to get some help with the plugin for a Source Build of UE5?

When you have a custom engine, you should move the plugin from /Marketplace/pluginFolder/ to YourProject/Plugins/ folder.

See, I am trying that however

D:\Projects\Game\Plugins\USQLite\Source\Runtime\ThirdParty\SQLite\Private\sqlite3.c(109466,38): error: implicit conversion from 'long long' to 'double' changes value from 9223372036854775806 to 9223372036854775808 [-Werror,-Wimplicit-int-float-conversion]

I am receiving this error among others and I’ve just downloaded it (5.0) and it’s just giving me this issue a bit.