What do you mean by unpacking assets ?
Any pak in the Content/Paks folder is mounted automatically on game startup. That doesn’t mean any asset is loaded, but they are find-able and load-able by the virtual filesystem.
Assets are loaded on-demand, when :
- specifically loading a path via StaticLoadObject or FSoftObjectPath or FClassFinder
- opening a level, with a path eg. “/Game/Levels/Level1”
- as a direct dependency of an asset being loaded
Available assets in pak files are discoverable via asset registry searches.
For example if the intent is to provide DLC maps in paks, you need to set up your UI to do an asset registry search to find all available assets of type “Engine.World” (that’s the class of a level asset), then populate the list dynamically according to the results. Results contain full path to the asset eg. “/Game/Levels/Level1” or “/Game/DLC23/Level23”. Once you run the command open /Game/DLC23/Level23
(or use Travel or whatever), the engine will automatically look up this path within all mounted pak files. Assets used inside the level are loaded similarly, as direct dependencies of the level itself.
Here is a example for searching maps both in blueprints and C++
If you are looking to search for blueprint classes/subclasses, you must use a different method because internally it does not work the same. For that you can use node GetBlueprintAssets which will look specifically for BP subclasses of specified classes, instead of looking for non-code assets.
Here is a BP example of using that, along with how to load the resulting asset into a useable/spawnable class :
Regarding steam, I can’t help much but I believe you can use Steam Workshop to provide optional downloadable content. Players can subscribe to items in the workshop and they get automatically downloaded (and updated), though I’m not sure where they end up on disk. Maybe you can configure a destination path.