We want to be able to store UE-generated content in an internal asset library and we currently are looking at utilizing Upack/Starter packs to accomplish this.
However, to support this workflow, we need to store 2 datasets:
The Upack file itself
The data itself
For #1, this is pretty straightforward and we use UnrealPak.exe to generate this upack file.
However, for #2 we need to zip up the contents to store in an artifact repository or filesystem. When the user needs to access the asset(s), we would unzip to the Engine’s Samples/ folder before it could be imported into the project.
Question: is there another way to consider architecting this solution? Does FAB use this approach, or something else?
What I would really love is to manage one single file rather than two in this case.
Thanks so much for your advice! That’s the track we’ve taken to far, and I’m confident we can make it work (we haven’t used the UToolMenu system before, so I’ll check that out!).
Another related question…
In the config file, we indicate what files we’d add to the project when imported. The config.ini would look something like:
Is there a way to have the pack look at an absolute path, or a path on a network drive? Initial tests weren’t successful, but my efforts were far from exhaustive! Perhaps something like:
Thanks Joan! We want to avoid making engine source changes so that we can minimize overhead costs when moving to new versions of Unreal. We’ll look at moving the data local before importing the upack file.
I really appreciate your help and guidance with this.
Based on how Unreal’s feature pack system works, I would suggest building a small Editor module to automate the entire workflow for your internal asset library. This approach is not difficult to implement, and it gives you full control over the cloning/downloading of the package, extracting the required files, and placing them correctly in the engine. It also allows you to customize any metadata or additional setup steps.
The idea would be to add a button in the Editor toolbar (using UToolMenus) that, when clicked:
1- Downloads the package from your internal repository.
2- Extracts the necessary contents the .upack file and, if your pack requires it, the corresponding Samples directory.
3- Automatically installs them into the appropriate engine or project folders so the Feature Pack becomes available in Add Feature or Content Pack.
If you have not worked with UToolMenus before, I can share more details on how to set it up.
An alternative approach is to place everything inside a content-only plugin. This gives you a single deliverable (a plugin folder or a zipped plugin) that can be dropped into a project or engine installation. Unreal natively understands plugins, and this workflow is straightforward. If your team is comfortable having the assets available through a plugin rather than through the Feature Pack UI, this is a clean and reliable solution.
A third option is to package everything into a single **.**pak file and build a custom importer that mounts and extracts its contents. This is technically possible, but compared to the editor-module approach or the plugin approach, it adds extra complexity and offers fewer benefits unless you have a specific runtime requirement.
Let me know if you need help with any of these solutions
The engine constructs the final file path by combining the engine’s root directory with the path specified in your config file. This logic is implemented inside FFeaturePackContentSource::BuildListOfAdditionalFiles.
Because of this, Unreal always prepends the engine root to your “+Files=” entry and then searches only within that local directory structure.
So the engine always concatenate the engine path before the path you added in the config and then it does the search but is is always a local search. If you want to att your behaviour, you would need to modify this function.
If you want to change this behavior (for example, to allow absolute or remote paths), you would need to modify that function in the engine source.