# Question about DLC

**URL:** <https://forums.unrealengine.com/t/question-about-dlc/1313648>\
**Category:** C++\
**Tags:** dlc, Steam, unreal-engine, UE5, Packaging, packaging-projects, CPP, question\
**Created:** [September 27, 2023, 3:30am UTC](https://forums.unrealengine.com/t/question-about-dlc/1313648 "2023-09-27T03:30:42Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![Chatouille](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/chatouille/32/1194622_2.png) [@Chatouille](https://forums.unrealengine.com/u/Chatouille)\
**Post date:** [September 27, 2023, 3:58pm UTC](https://forums.unrealengine.com/t/question-about-dlc/1313648/2 "2023-09-27T15:58:38Z")

</div>

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++

> [@How to check ServerTravel error or check if the map exists](https://forums.unrealengine.com/t/how-to-check-servertravel-error-or-check-if-the-map-exists/823116):
>
> I am using ServerTravel for switching maps in a single player game. ServerTravel returns true even if the map does not exist. The map name will be given by the user and I have to check if it exists first. How can I do that?

* * *

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 :

> [@Get Assets by class always return "Blueprint" classes objects](https://forums.unrealengine.com/t/get-assets-by-class-always-return-blueprint-classes-objects/1256686/2):
>
> Since UE5 the asset registry should be properly able to search for subclasses and provides out-of-the-box functions to do so. Try node GetBlueprintAssets, with an ARFilter set to look for subclasses of your base class Comprobation. The package path depends on where your Comprobation class resides. If it’s a native class, use /Script/ProjectName. If it’s a blueprint class, use package path like /Game/Blueprints/Comprobation and generated class name ie. Comprobation\_C. Once you’ve found some …

* * *

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.

---

_[View the full topic](https://forums.unrealengine.com/t/question-about-dlc/1313648)._
